diff --git a/sflphone-gtk/configure.ac b/sflphone-gtk/configure.ac
index e58ac42b265cd5f23634b3189f0490ad16da6fc4..2864ef4cf513198a24413a24614d56ede7110563 100644
--- a/sflphone-gtk/configure.ac
+++ b/sflphone-gtk/configure.ac
@@ -33,6 +33,7 @@ PKG_CHECK_MODULES(DEPS, \
     gtk+-2.0 >= 2.2     \
     glib-2.0 >= 2.2     \
     libsexy >= 0.1    \
+    libebook-1.2 >= 2.22
 )
 
 
@@ -42,6 +43,7 @@ AC_SUBST(DEPS_LIBS)
 AC_OUTPUT([
 Makefile 
 src/Makefile 
+src/contactlist/Makefile
 pixmaps/Makefile
 sflphone.desktop
 ])
diff --git a/sflphone-gtk/pixmaps/Makefile.am b/sflphone-gtk/pixmaps/Makefile.am
index af3933982c18d853b1f4023f63e0fd0cbdff6e5b..9a2a423f663b9d0f42807b366af692eceb72089b 100644
--- a/sflphone-gtk/pixmaps/Makefile.am
+++ b/sflphone-gtk/pixmaps/Makefile.am
@@ -2,6 +2,6 @@ icondir   = $(datadir)/pixmaps
 
 icon_DATA = sflphone.png
 
-buttons_DATA = accept.svg current.svg transfert.svg hang_up.svg hold.svg unhold.svg refuse.svg call.svg ring.svg dial.svg mic.svg mic_25.svg mic_50.svg mic_75.svg speaker.svg speaker_25.svg speaker_50.svg speaker_75.svg fail.svg incoming.svg outgoing.svg missed.svg mailbox.svg busy.svg icon_accept.svg icon_hold.svg icon_unhold.svg icon_hangup.svg icon_call.svg icon_dialpad.svg icon_volume.svg icon_dialpad_off.svg icon_volume_off.svg history.svg history2.svg sflphone.png stock_person.svg icon_rec.svg rec_call.svg
+buttons_DATA = accept.svg current.svg transfert.svg hang_up.svg hold.svg unhold.svg refuse.svg call.svg ring.svg dial.svg mic.svg mic_25.svg mic_50.svg mic_75.svg speaker.svg speaker_25.svg speaker_50.svg speaker_75.svg fail.svg incoming.svg outgoing.svg missed.svg mailbox.svg busy.svg icon_accept.svg icon_hold.svg icon_unhold.svg icon_hangup.svg icon_call.svg icon_dialpad.svg icon_volume.svg icon_dialpad_off.svg icon_volume_off.svg history.svg history2.svg sflphone.png stock_person.svg icon_rec.svg rec_call.svg addressbook.svg contact_default.svg face-monkey.svg users.svg home.svg
 buttonsdir   = $(datadir)/sflphone
 EXTRA_DIST   = $(buttons_DATA) $(icon_DATA)
diff --git a/sflphone-gtk/pixmaps/addressbook.svg b/sflphone-gtk/pixmaps/addressbook.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8b5931f97efd230af56de0b4e5c71950a4f879e8
--- /dev/null
+++ b/sflphone-gtk/pixmaps/addressbook.svg
@@ -0,0 +1,1032 @@
+<?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="24"
+   height="24"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docbase="/home/plbeaudoin/SFLPhone/sflphone/sflphone-gtk/pixmaps"
+   sodipodi:docname="addressbook.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:modified="true">
+  <defs
+     id="defs4">
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6642"
+       id="radialGradient6254"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5261839,0,0,1.400538,-2.7953523,-3.4069917)"
+       cx="5.312501"
+       cy="8.1713457"
+       fx="5.312501"
+       fy="8.1713457"
+       r="6" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6642"
+       id="radialGradient6252"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5261839,0,0,1.400538,-2.7953523,-3.4069917)"
+       cx="5.312501"
+       cy="8.1713457"
+       fx="5.312501"
+       fy="8.1713457"
+       r="6" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6642"
+       id="radialGradient6250"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5261839,0,0,1.400538,-2.7953523,-3.4069917)"
+       cx="5.312501"
+       cy="8.1713457"
+       fx="5.312501"
+       fy="8.1713457"
+       r="6" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6642"
+       id="radialGradient6248"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5261839,0,0,1.400538,-2.7953523,-3.4069917)"
+       cx="5.312501"
+       cy="8.1713457"
+       fx="5.312501"
+       fy="8.1713457"
+       r="6" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6642"
+       id="radialGradient6246"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5261839,0,0,1.400538,-2.7953523,-3.4069917)"
+       cx="5.312501"
+       cy="8.1713457"
+       fx="5.312501"
+       fy="8.1713457"
+       r="6" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6642"
+       id="radialGradient6244"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.5261839,0,0,1.400538,-2.7953523,-3.4069917)"
+       cx="5.312501"
+       cy="8.1713457"
+       fx="5.312501"
+       fy="8.1713457"
+       r="6" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6881">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6883" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6885" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6881"
+       id="linearGradient6242"
+       gradientUnits="userSpaceOnUse"
+       x1="17.353554"
+       y1="7.9356604"
+       x2="28.035534"
+       y2="81.759773" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6820">
+      <stop
+         style="stop-color:#729fcf;stop-opacity:1;"
+         offset="0"
+         id="stop6822" />
+      <stop
+         style="stop-color:#729fcf;stop-opacity:0;"
+         offset="1"
+         id="stop6824" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6820"
+       id="linearGradient6240"
+       gradientUnits="userSpaceOnUse"
+       x1="24.75"
+       y1="43.927441"
+       x2="24.75"
+       y2="35.790096" />
+    <linearGradient
+       id="linearGradient6499"
+       inkscape:collect="always">
+      <stop
+         id="stop6501"
+         offset="0"
+         style="stop-color:#729fcf;stop-opacity:1" />
+      <stop
+         id="stop6503"
+         offset="1"
+         style="stop-color:#3465a4;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6499"
+       id="linearGradient6238"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8885602,0,0,1,-55.486688,0)"
+       x1="17.077137"
+       y1="14.375"
+       x2="41.06271"
+       y2="56.9375" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6794"
+       id="linearGradient6236"
+       gradientUnits="userSpaceOnUse"
+       x1="42.875"
+       y1="30.9375"
+       x2="39.919209"
+       y2="51.062393" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6794"
+       id="linearGradient6234"
+       gradientUnits="userSpaceOnUse"
+       x1="42.875"
+       y1="30.9375"
+       x2="39.919209"
+       y2="51.062393" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6843">
+      <stop
+         style="stop-color:#fec065;stop-opacity:1"
+         offset="0"
+         id="stop6845" />
+      <stop
+         style="stop-color:#fcaf3e;stop-opacity:1"
+         offset="1"
+         id="stop6847" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6843"
+       id="radialGradient6232"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7452385,0,0,0.9108471,-49.172637,3.6387251)"
+       cx="42.5"
+       cy="36.307945"
+       fx="42.5"
+       fy="36.307945"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6851">
+      <stop
+         style="stop-color:#fdee77;stop-opacity:1"
+         offset="0"
+         id="stop6853" />
+      <stop
+         style="stop-color:#fce94f;stop-opacity:1"
+         offset="1"
+         id="stop6855" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6851"
+       id="radialGradient6230"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8213255,0,0,1.0038423,-52.350499,0.173875)"
+       cx="42.8125"
+       cy="25.727272"
+       fx="42.8125"
+       fy="25.727272"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6794">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6796" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6798" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6794"
+       id="linearGradient6228"
+       gradientUnits="userSpaceOnUse"
+       x1="42.875"
+       y1="30.9375"
+       x2="39.919209"
+       y2="51.062393" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6859">
+      <stop
+         style="stop-color:#9ee757;stop-opacity:1"
+         offset="0"
+         id="stop6861" />
+      <stop
+         style="stop-color:#8ae234;stop-opacity:1"
+         offset="1"
+         id="stop6863" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6859"
+       id="radialGradient6226"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7867179,0,0,1.4423161,-51.042152,-5.8996785)"
+       cx="42"
+       cy="15.814279"
+       fx="42"
+       fy="15.814279"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6642"
+       id="radialGradient6224"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3279654,0,-0.4677714,1.6070078,3.489273,-5.7538092)"
+       cx="4.4339509"
+       cy="8.3226004"
+       fx="4.4339509"
+       fy="8.3226004"
+       r="6" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6642"
+       id="radialGradient6222"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3279654,0,-0.4677714,1.6070078,3.489273,-5.7538092)"
+       cx="4.4339509"
+       cy="8.3226004"
+       fx="4.4339509"
+       fy="8.3226004"
+       r="6" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6642"
+       id="radialGradient6220"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3279654,0,-0.4677714,1.6070078,3.489273,-5.7538092)"
+       cx="4.4339509"
+       cy="8.3226004"
+       fx="4.4339509"
+       fy="8.3226004"
+       r="6" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6642"
+       id="radialGradient6218"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3279654,0,-0.4677714,1.6070078,3.489273,-5.7538092)"
+       cx="4.4339509"
+       cy="8.3226004"
+       fx="4.4339509"
+       fy="8.3226004"
+       r="6" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6642"
+       id="radialGradient6216"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3279654,0,-0.4677714,1.6070078,3.489273,-5.7538092)"
+       cx="4.4339509"
+       cy="8.3226004"
+       fx="4.4339509"
+       fy="8.3226004"
+       r="6" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6642">
+      <stop
+         style="stop-color:#d3d7cf;stop-opacity:1"
+         offset="0"
+         id="stop6644" />
+      <stop
+         style="stop-color:#888a85;stop-opacity:1"
+         offset="1"
+         id="stop6646" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6642"
+       id="radialGradient6214"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3279654,0,-0.4677714,1.6070078,3.489273,-5.7538092)"
+       cx="4.4339509"
+       cy="8.3226004"
+       fx="4.4339509"
+       fy="8.3226004"
+       r="6" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6212"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5060">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop5062" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5064" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient6210"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="0"
+         id="stop5050" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5052" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient6208"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2433">
+      <stop
+         style="stop-color:#008000;stop-opacity:1;"
+         offset="0"
+         id="stop2435" />
+      <stop
+         style="stop-color:#008000;stop-opacity:0;"
+         offset="1"
+         id="stop2437" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 12 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="24 : 12 : 1"
+       inkscape:persp3d-origin="12 : 8 : 1"
+       id="perspective32" />
+    <linearGradient
+       id="linearGradient4269">
+      <stop
+         style="stop-color:#26b000;stop-opacity:1;"
+         offset="0"
+         id="stop4271" />
+      <stop
+         style="stop-color:#26b000;stop-opacity:0;"
+         offset="1"
+         id="stop4273" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4183">
+      <stop
+         id="stop4185"
+         offset="0"
+         style="stop-color:#26b000;stop-opacity:1;" />
+      <stop
+         id="stop4187"
+         offset="1"
+         style="stop-color:#145f00;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4167">
+      <stop
+         style="stop-color:#80000e;stop-opacity:1;"
+         offset="0"
+         id="stop4169" />
+      <stop
+         style="stop-color:#b00014;stop-opacity:0;"
+         offset="1"
+         id="stop4171" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4269"
+       id="linearGradient4275"
+       x1="15.630395"
+       y1="22.874208"
+       x2="15.630395"
+       y2="8.5305319"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.256521,0,0,-1.256521,-7.854319,28.773309)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2433"
+       id="linearGradient2439"
+       x1="2.965755"
+       y1="-0.80084854"
+       x2="32.578228"
+       y2="16.739393"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16"
+     inkscape:cx="6.09271"
+     inkscape:cy="2.756874"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     width="32px"
+     height="32px"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="1680"
+     inkscape:window-height="975"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     showgrid="false">
+    <sodipodi:guide
+       orientation="vertical"
+       position="15.982143"
+       id="guide3146" />
+  </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="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g6053"
+       transform="matrix(0.5524765,0,0,0.5292103,31.058815,-0.3395984)">
+      <g
+         transform="matrix(2.0192728e-2,0,0,1.7083182e-2,-17.539869,42.402519)"
+         id="g6055"
+         style="display:inline">
+        <rect
+           style="opacity:0.39195981;fill:url(#linearGradient6208);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           id="rect6057"
+           width="1339.6335"
+           height="478.35718"
+           x="-1559.2523"
+           y="-150.69685" />
+        <path
+           style="opacity:0.40206185;fill:url(#radialGradient6210);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z"
+           id="path6059"
+           sodipodi:nodetypes="cccc" />
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path6061"
+           d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z"
+           style="opacity:0.40206185;fill:url(#radialGradient6212);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      </g>
+      <g
+         transform="translate(-60,30)"
+         id="g6063">
+        <path
+           style="fill:none;fill-opacity:1;stroke:url(#radialGradient6214);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 14.345337,8.5060394 C 13.701657,10.717373 11.23254,12.512078 8.8339139,12.512078 C 6.4352883,12.512078 5.0109846,10.717373 5.6546645,8.5060394 C 6.2983445,6.2947058 8.7674619,4.5000001 11.166088,4.5000001 C 13.564713,4.5000001 14.989017,6.2947058 14.345337,8.5060394 z"
+           id="path6065" />
+        <path
+           sodipodi:type="arc"
+           style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1.00080287;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6067"
+           sodipodi:cx="9.4575529"
+           sodipodi:cy="9.0207386"
+           sodipodi:rx="4.9939418"
+           sodipodi:ry="3.4913397"
+           d="M 14.451495,9.0207386 A 4.9939418,3.4913397 0 1 1 4.4636111,9.0207386 A 4.9939418,3.4913397 0 1 1 14.451495,9.0207386 z"
+           transform="matrix(0.8701215,0,-0.3339941,1.1474218,4.7836537,-1.8445527)" />
+      </g>
+      <g
+         transform="translate(-60,24)"
+         id="g6070">
+        <path
+           style="fill:none;fill-opacity:1;stroke:url(#radialGradient6216);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 14.345337,8.5060394 C 13.701657,10.717373 11.23254,12.512078 8.8339139,12.512078 C 6.4352883,12.512078 5.0109846,10.717373 5.6546645,8.5060394 C 6.2983445,6.2947058 8.7674619,4.5000001 11.166088,4.5000001 C 13.564713,4.5000001 14.989017,6.2947058 14.345337,8.5060394 z"
+           id="path6072" />
+        <path
+           sodipodi:type="arc"
+           style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1.00080287;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6074"
+           sodipodi:cx="9.4575529"
+           sodipodi:cy="9.0207386"
+           sodipodi:rx="4.9939418"
+           sodipodi:ry="3.4913397"
+           d="M 14.451495,9.0207386 A 4.9939418,3.4913397 0 1 1 4.4636111,9.0207386 A 4.9939418,3.4913397 0 1 1 14.451495,9.0207386 z"
+           transform="matrix(0.8701215,0,-0.3339941,1.1474218,4.7836537,-1.8445527)" />
+      </g>
+      <g
+         transform="translate(-60,18)"
+         id="g6076">
+        <path
+           style="fill:none;fill-opacity:1;stroke:url(#radialGradient6218);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 14.345337,8.5060394 C 13.701657,10.717373 11.23254,12.512078 8.8339139,12.512078 C 6.4352883,12.512078 5.0109846,10.717373 5.6546645,8.5060394 C 6.2983445,6.2947058 8.7674619,4.5000001 11.166088,4.5000001 C 13.564713,4.5000001 14.989017,6.2947058 14.345337,8.5060394 z"
+           id="path6078" />
+        <path
+           sodipodi:type="arc"
+           style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1.00080287;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6080"
+           sodipodi:cx="9.4575529"
+           sodipodi:cy="9.0207386"
+           sodipodi:rx="4.9939418"
+           sodipodi:ry="3.4913397"
+           d="M 14.451495,9.0207386 A 4.9939418,3.4913397 0 1 1 4.4636111,9.0207386 A 4.9939418,3.4913397 0 1 1 14.451495,9.0207386 z"
+           transform="matrix(0.8701215,0,-0.3339941,1.1474218,4.7836537,-1.8445527)" />
+      </g>
+      <g
+         transform="translate(-60,12)"
+         id="g6082">
+        <path
+           style="fill:none;fill-opacity:1;stroke:url(#radialGradient6220);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 14.345337,8.5060394 C 13.701657,10.717373 11.23254,12.512078 8.8339139,12.512078 C 6.4352883,12.512078 5.0109846,10.717373 5.6546645,8.5060394 C 6.2983445,6.2947058 8.7674619,4.5000001 11.166088,4.5000001 C 13.564713,4.5000001 14.989017,6.2947058 14.345337,8.5060394 z"
+           id="path6084" />
+        <path
+           sodipodi:type="arc"
+           style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1.00080287;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6086"
+           sodipodi:cx="9.4575529"
+           sodipodi:cy="9.0207386"
+           sodipodi:rx="4.9939418"
+           sodipodi:ry="3.4913397"
+           d="M 14.451495,9.0207386 A 4.9939418,3.4913397 0 1 1 4.4636111,9.0207386 A 4.9939418,3.4913397 0 1 1 14.451495,9.0207386 z"
+           transform="matrix(0.8701215,0,-0.3339941,1.1474218,4.7836537,-1.8445527)" />
+      </g>
+      <g
+         transform="translate(-60,6)"
+         id="g6088">
+        <path
+           style="fill:none;fill-opacity:1;stroke:url(#radialGradient6222);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 14.345337,8.5060394 C 13.701657,10.717373 11.23254,12.512078 8.8339139,12.512078 C 6.4352883,12.512078 5.0109846,10.717373 5.6546645,8.5060394 C 6.2983445,6.2947058 8.7674619,4.5000001 11.166088,4.5000001 C 13.564713,4.5000001 14.989017,6.2947058 14.345337,8.5060394 z"
+           id="path6090" />
+        <path
+           sodipodi:type="arc"
+           style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1.00080287;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6092"
+           sodipodi:cx="9.4575529"
+           sodipodi:cy="9.0207386"
+           sodipodi:rx="4.9939418"
+           sodipodi:ry="3.4913397"
+           d="M 14.451495,9.0207386 A 4.9939418,3.4913397 0 1 1 4.4636111,9.0207386 A 4.9939418,3.4913397 0 1 1 14.451495,9.0207386 z"
+           transform="matrix(0.8701215,0,-0.3339941,1.1474218,4.7836537,-1.8445527)" />
+      </g>
+      <g
+         transform="translate(-60,0)"
+         id="g6094">
+        <path
+           style="fill:none;fill-opacity:1;stroke:url(#radialGradient6224);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 14.345337,8.5060394 C 13.701657,10.717373 11.23254,12.512078 8.8339139,12.512078 C 6.4352883,12.512078 5.0109846,10.717373 5.6546645,8.5060394 C 6.2983445,6.2947058 8.7674619,4.5000001 11.166088,4.5000001 C 13.564713,4.5000001 14.989017,6.2947058 14.345337,8.5060394 z"
+           id="path6096" />
+        <path
+           sodipodi:type="arc"
+           style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1.00080287;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6098"
+           sodipodi:cx="9.4575529"
+           sodipodi:cy="9.0207386"
+           sodipodi:rx="4.9939418"
+           sodipodi:ry="3.4913397"
+           d="M 14.451495,9.0207386 A 4.9939418,3.4913397 0 1 1 4.4636111,9.0207386 A 4.9939418,3.4913397 0 1 1 14.451495,9.0207386 z"
+           transform="matrix(0.8701215,0,-0.3339941,1.1474218,4.7836537,-1.8445527)" />
+      </g>
+      <rect
+         ry="2.4748738"
+         rx="2.3950391"
+         y="1.5"
+         x="-50.5"
+         height="39.999996"
+         width="29.999998"
+         id="rect6100"
+         style="fill:#3465a4;fill-opacity:1;stroke:#204a87;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <g
+         transform="translate(-62,1)"
+         id="g6102">
+        <path
+           style="fill:#d3d7cf;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 14,3 L 39.182408,3 L 40,3.6961651 L 40,25 L 14,25 L 14,3 z"
+           id="path6104"
+           sodipodi:nodetypes="cccccc" />
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 14,3 L 39.65625,3 C 40.711932,4.0277742 39.16614,5.0151389 37.65625,5 L 12.625,5 C 14.126385,5 15.015732,3.4971845 14,3 z"
+           id="path6106"
+           sodipodi:nodetypes="ccccc" />
+      </g>
+      <rect
+         ry="1.1136932"
+         rx="1.2374369"
+         y="9.5"
+         x="-20.5"
+         height="10"
+         width="5"
+         id="rect6108"
+         style="fill:url(#radialGradient6226);fill-opacity:1;stroke:#4e9a06;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path6110"
+         d="M -48.079373,2.53125 C -48.880201,2.53125 -49.46875,3.1401838 -49.46875,3.96875 L -49.46875,39.03125 C -49.46875,39.859816 -48.880201,40.46875 -48.079373,40.46875 L -22.889376,40.46875 C -22.088548,40.46875 -21.499999,39.859815 -21.499999,39.03125 L -21.499999,3.96875 C -21.499999,3.1401839 -22.088549,2.53125 -22.889376,2.53125 L -48.079373,2.53125 z"
+         style="opacity:0.2;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         transform="translate(-62,-20)"
+         d="M 39.75,30.5 C 39.609554,30.5 39.5,30.609555 39.5,30.75 L 39.5,38.25 C 39.5,38.390448 39.609551,38.5 39.75,38.5 L 45.25,38.5 C 45.390448,38.5 45.5,38.390449 45.5,38.25 L 45.5,30.75 C 45.5,30.609552 45.390449,30.5 45.25,30.5 L 39.75,30.5 z"
+         id="path6112"
+         style="opacity:0.5;fill:none;fill-opacity:1;stroke:url(#linearGradient6228);stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         inkscape:original="M 39.75 29.5 C 39.06446 29.5 38.5 30.064461 38.5 30.75 L 38.5 38.25 C 38.5 38.93554 39.064459 39.5 39.75 39.5 L 45.25 39.5 C 45.93554 39.5 46.5 38.935541 46.5 38.25 L 46.5 30.75 C 46.5 30.06446 45.935541 29.5 45.25 29.5 L 39.75 29.5 z "
+         inkscape:radius="-0.99302852"
+         sodipodi:type="inkscape:offset" />
+      <rect
+         ry="1.2374369"
+         rx="1.2374369"
+         y="19.5"
+         x="-22.5"
+         height="10"
+         width="8"
+         id="rect6114"
+         style="fill:url(#radialGradient6230);fill-opacity:1;stroke:#c4a000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         ry="1.2374369"
+         rx="1.2374369"
+         y="29.5"
+         x="-21.5"
+         height="10"
+         width="8"
+         id="rect6116"
+         style="fill:url(#radialGradient6232);fill-opacity:1;stroke:#ce5c00;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         transform="translate(-61,-10)"
+         d="M 39.75,30.5 C 39.609554,30.5 39.5,30.609555 39.5,30.75 L 39.5,38.25 C 39.5,38.390448 39.609551,38.5 39.75,38.5 L 45.25,38.5 C 45.390448,38.5 45.5,38.390449 45.5,38.25 L 45.5,30.75 C 45.5,30.609552 45.390449,30.5 45.25,30.5 L 39.75,30.5 z"
+         id="path6118"
+         style="opacity:0.5;fill:none;fill-opacity:1;stroke:url(#linearGradient6234);stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         inkscape:original="M 39.75 29.5 C 39.06446 29.5 38.5 30.064461 38.5 30.75 L 38.5 38.25 C 38.5 38.93554 39.064459 39.5 39.75 39.5 L 45.25 39.5 C 45.93554 39.5 46.5 38.935541 46.5 38.25 L 46.5 30.75 C 46.5 30.06446 45.935541 29.5 45.25 29.5 L 39.75 29.5 z "
+         inkscape:radius="-0.99302852"
+         sodipodi:type="inkscape:offset" />
+      <rect
+         y="19"
+         x="-24.8125"
+         height="10"
+         width="6.8125"
+         id="rect6120"
+         style="opacity:0.25;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         transform="translate(-60,0)"
+         d="M 39.75,30.5 C 39.609554,30.5 39.5,30.609555 39.5,30.75 L 39.5,38.25 C 39.5,38.390448 39.609551,38.5 39.75,38.5 L 45.25,38.5 C 45.390448,38.5 45.5,38.390449 45.5,38.25 L 45.5,30.75 C 45.5,30.609552 45.390449,30.5 45.25,30.5 L 39.75,30.5 z"
+         id="path6122"
+         style="opacity:0.5;fill:none;fill-opacity:1;stroke:url(#linearGradient6236);stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         inkscape:original="M 39.75 29.5 C 39.06446 29.5 38.5 30.064461 38.5 30.75 L 38.5 38.25 C 38.5 38.93554 39.064459 39.5 39.75 39.5 L 45.25 39.5 C 45.93554 39.5 46.5 38.935541 46.5 38.25 L 46.5 30.75 C 46.5 30.06446 45.935541 29.5 45.25 29.5 L 39.75 29.5 z "
+         inkscape:radius="-0.99302852"
+         sodipodi:type="inkscape:offset" />
+      <rect
+         y="29"
+         x="-24.8125"
+         height="11"
+         width="6.8125"
+         id="rect6124"
+         style="opacity:0.1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <rect
+         y="9"
+         x="-25"
+         height="10"
+         width="7"
+         id="rect6126"
+         style="opacity:0.15517243;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         style="fill:url(#linearGradient6238);fill-opacity:1;stroke:#204a87;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+         d="M -49.025126,6.5 L -21.974874,6.5 C -20.603794,6.5 -19.5,7.6037937 -19.5,8.9748738 L -19.5,43.025122 C -19.5,44.396202 -20.603794,45.499996 -21.974874,45.499996 L -49.025126,45.499996 C -50.396206,45.499996 -51.5,44.396202 -51.5,43.025122 L -51.5,8.9748738 C -51.5,7.6037937 -50.396206,6.5 -49.025126,6.5 z"
+         id="rect6128"
+         sodipodi:nodetypes="ccccccccc" />
+      <path
+         transform="translate(-60,0)"
+         style="fill:url(#linearGradient6240);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+         d="M 10.96875,7 C 9.866556,7 9,7.8665563 9,8.96875 L 9,43.03125 C 9,44.133444 9.8665564,45 10.96875,45 L 38.03125,45 C 39.133444,45 40,44.133443 40,43.03125 L 40,8.96875 C 40,7.8665562 39.133443,7 38.03125,7 L 10.96875,7 z"
+         id="path6130"
+         sodipodi:nodetypes="ccccccccc" />
+      <path
+         transform="translate(-60,0)"
+         style="opacity:0.46120689;fill:none;fill-opacity:1;stroke:url(#linearGradient6242);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+         d="M 10.96875,7.53125 C 10.140184,7.53125 9.53125,8.1401838 9.53125,8.96875 L 9.53125,43.03125 C 9.53125,43.859816 10.140184,44.46875 10.96875,44.46875 L 38.03125,44.46875 C 38.859816,44.46875 39.46875,43.859815 39.46875,43.03125 L 39.46875,8.96875 C 39.46875,8.1401839 38.859815,7.53125 38.03125,7.53125 L 10.96875,7.53125 z"
+         id="path6132"
+         sodipodi:nodetypes="ccccccccc" />
+      <path
+         transform="matrix(0.9838006,0,0,0.9524402,-59.717389,30.145517)"
+         d="M 13.435029,11.959651 A 1.524699,1.6130873 0 1 1 10.385631,11.959651 A 1.524699,1.6130873 0 1 1 13.435029,11.959651 z"
+         sodipodi:ry="1.6130873"
+         sodipodi:rx="1.524699"
+         sodipodi:cy="11.959651"
+         sodipodi:cx="11.91033"
+         id="path6134"
+         style="opacity:1;fill:none;fill-opacity:1;stroke:#204a87;stroke-width:1.03306484;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(0.9838006,0,0,0.9524402,-59.717389,24.145517)"
+         d="M 13.435029,11.959651 A 1.524699,1.6130873 0 1 1 10.385631,11.959651 A 1.524699,1.6130873 0 1 1 13.435029,11.959651 z"
+         sodipodi:ry="1.6130873"
+         sodipodi:rx="1.524699"
+         sodipodi:cy="11.959651"
+         sodipodi:cx="11.91033"
+         id="path6136"
+         style="opacity:1;fill:none;fill-opacity:1;stroke:#204a87;stroke-width:1.03306484;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(0.9838006,0,0,0.9524402,-59.717389,18.145517)"
+         d="M 13.435029,11.959651 A 1.524699,1.6130873 0 1 1 10.385631,11.959651 A 1.524699,1.6130873 0 1 1 13.435029,11.959651 z"
+         sodipodi:ry="1.6130873"
+         sodipodi:rx="1.524699"
+         sodipodi:cy="11.959651"
+         sodipodi:cx="11.91033"
+         id="path6138"
+         style="opacity:1;fill:none;fill-opacity:1;stroke:#204a87;stroke-width:1.03306484;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(0.9838006,0,0,0.9524402,-59.717389,6.1455167)"
+         d="M 13.435029,11.959651 A 1.524699,1.6130873 0 1 1 10.385631,11.959651 A 1.524699,1.6130873 0 1 1 13.435029,11.959651 z"
+         sodipodi:ry="1.6130873"
+         sodipodi:rx="1.524699"
+         sodipodi:cy="11.959651"
+         sodipodi:cx="11.91033"
+         id="path6140"
+         style="opacity:1;fill:none;fill-opacity:1;stroke:#204a87;stroke-width:1.03306484;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(0.9838006,0,0,0.9524402,-59.717389,12.145517)"
+         d="M 13.435029,11.959651 A 1.524699,1.6130873 0 1 1 10.385631,11.959651 A 1.524699,1.6130873 0 1 1 13.435029,11.959651 z"
+         sodipodi:ry="1.6130873"
+         sodipodi:rx="1.524699"
+         sodipodi:cy="11.959651"
+         sodipodi:cx="11.91033"
+         id="path6142"
+         style="opacity:1;fill:none;fill-opacity:1;stroke:#204a87;stroke-width:1.03306484;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(0.9838006,0,0,0.9524402,-59.717389,0.1455168)"
+         d="M 13.435029,11.959651 A 1.524699,1.6130873 0 1 1 10.385631,11.959651 A 1.524699,1.6130873 0 1 1 13.435029,11.959651 z"
+         sodipodi:ry="1.6130873"
+         sodipodi:rx="1.524699"
+         sodipodi:cy="11.959651"
+         sodipodi:cx="11.91033"
+         id="path6144"
+         style="opacity:1;fill:none;fill-opacity:1;stroke:#204a87;stroke-width:1.03306484;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <g
+         transform="translate(-60,30)"
+         id="g6146">
+        <path
+           style="fill:none;fill-opacity:1;stroke:url(#radialGradient6244);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 5.65625,8.5 C 5.0125701,10.711334 6.4451242,12.5 8.84375,12.5 C 9.757344,12.5 10.672765,12.22474 11.5,11.78125"
+           id="path6148"
+           sodipodi:nodetypes="csc" />
+        <path
+           style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 6.84375,6.5 C 6.2961784,7.0922996 5.8701722,7.7650799 5.65625,8.5 C 5.0125701,10.711334 6.4451242,12.5 8.84375,12.5 C 9.757344,12.5 10.672765,12.22474 11.5,11.78125"
+           id="path6150"
+           sodipodi:nodetypes="cssc" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6152"
+           sodipodi:cx="5.265625"
+           sodipodi:cy="8.2578125"
+           sodipodi:rx="0.546875"
+           sodipodi:ry="0.8046875"
+           d="M 5.8125,8.2578125 A 0.546875,0.8046875 0 1 1 4.71875,8.2578125 A 0.546875,0.8046875 0 1 1 5.8125,8.2578125 z"
+           transform="matrix(1.3714287,0,0,0.9320388,-1.7365942,0.3133592)" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:0.7;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6154"
+           sodipodi:cx="5.265625"
+           sodipodi:cy="8.2578125"
+           sodipodi:rx="0.546875"
+           sodipodi:ry="0.8046875"
+           d="M 5.8125,8.2578125 A 0.546875,0.8046875 0 1 1 4.71875,8.2578125 A 0.546875,0.8046875 0 1 1 5.8125,8.2578125 z"
+           transform="matrix(1.3714287,0,0,0.9320388,4.0970367,3.7163106)" />
+      </g>
+      <g
+         transform="translate(-60,24)"
+         id="g6156">
+        <path
+           style="fill:none;fill-opacity:1;stroke:url(#radialGradient6246);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 5.65625,8.5 C 5.0125701,10.711334 6.4451242,12.5 8.84375,12.5 C 9.757344,12.5 10.672765,12.22474 11.5,11.78125"
+           id="path6158"
+           sodipodi:nodetypes="csc" />
+        <path
+           style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 6.84375,6.5 C 6.2961784,7.0922996 5.8701722,7.7650799 5.65625,8.5 C 5.0125701,10.711334 6.4451242,12.5 8.84375,12.5 C 9.757344,12.5 10.672765,12.22474 11.5,11.78125"
+           id="path6160"
+           sodipodi:nodetypes="cssc" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6162"
+           sodipodi:cx="5.265625"
+           sodipodi:cy="8.2578125"
+           sodipodi:rx="0.546875"
+           sodipodi:ry="0.8046875"
+           d="M 5.8125,8.2578125 A 0.546875,0.8046875 0 1 1 4.71875,8.2578125 A 0.546875,0.8046875 0 1 1 5.8125,8.2578125 z"
+           transform="matrix(1.3714287,0,0,0.9320388,-1.7365942,0.3133592)" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:0.7;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6164"
+           sodipodi:cx="5.265625"
+           sodipodi:cy="8.2578125"
+           sodipodi:rx="0.546875"
+           sodipodi:ry="0.8046875"
+           d="M 5.8125,8.2578125 A 0.546875,0.8046875 0 1 1 4.71875,8.2578125 A 0.546875,0.8046875 0 1 1 5.8125,8.2578125 z"
+           transform="matrix(1.3714287,0,0,0.9320388,4.0970367,3.7163106)" />
+      </g>
+      <g
+         transform="translate(-60,18)"
+         id="g6166">
+        <path
+           style="fill:none;fill-opacity:1;stroke:url(#radialGradient6248);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 5.65625,8.5 C 5.0125701,10.711334 6.4451242,12.5 8.84375,12.5 C 9.757344,12.5 10.672765,12.22474 11.5,11.78125"
+           id="path6168"
+           sodipodi:nodetypes="csc" />
+        <path
+           style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 6.84375,6.5 C 6.2961784,7.0922996 5.8701722,7.7650799 5.65625,8.5 C 5.0125701,10.711334 6.4451242,12.5 8.84375,12.5 C 9.757344,12.5 10.672765,12.22474 11.5,11.78125"
+           id="path6170"
+           sodipodi:nodetypes="cssc" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6172"
+           sodipodi:cx="5.265625"
+           sodipodi:cy="8.2578125"
+           sodipodi:rx="0.546875"
+           sodipodi:ry="0.8046875"
+           d="M 5.8125,8.2578125 A 0.546875,0.8046875 0 1 1 4.71875,8.2578125 A 0.546875,0.8046875 0 1 1 5.8125,8.2578125 z"
+           transform="matrix(1.3714287,0,0,0.9320388,-1.7365942,0.3133592)" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:0.7;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6174"
+           sodipodi:cx="5.265625"
+           sodipodi:cy="8.2578125"
+           sodipodi:rx="0.546875"
+           sodipodi:ry="0.8046875"
+           d="M 5.8125,8.2578125 A 0.546875,0.8046875 0 1 1 4.71875,8.2578125 A 0.546875,0.8046875 0 1 1 5.8125,8.2578125 z"
+           transform="matrix(1.3714287,0,0,0.9320388,4.0970367,3.7163106)" />
+      </g>
+      <g
+         transform="translate(-60,12)"
+         id="g6176">
+        <path
+           style="fill:none;fill-opacity:1;stroke:url(#radialGradient6250);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 5.65625,8.5 C 5.0125701,10.711334 6.4451242,12.5 8.84375,12.5 C 9.757344,12.5 10.672765,12.22474 11.5,11.78125"
+           id="path6178"
+           sodipodi:nodetypes="csc" />
+        <path
+           style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 6.84375,6.5 C 6.2961784,7.0922996 5.8701722,7.7650799 5.65625,8.5 C 5.0125701,10.711334 6.4451242,12.5 8.84375,12.5 C 9.757344,12.5 10.672765,12.22474 11.5,11.78125"
+           id="path6180"
+           sodipodi:nodetypes="cssc" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6182"
+           sodipodi:cx="5.265625"
+           sodipodi:cy="8.2578125"
+           sodipodi:rx="0.546875"
+           sodipodi:ry="0.8046875"
+           d="M 5.8125,8.2578125 A 0.546875,0.8046875 0 1 1 4.71875,8.2578125 A 0.546875,0.8046875 0 1 1 5.8125,8.2578125 z"
+           transform="matrix(1.3714287,0,0,0.9320388,-1.7365942,0.3133592)" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:0.7;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6184"
+           sodipodi:cx="5.265625"
+           sodipodi:cy="8.2578125"
+           sodipodi:rx="0.546875"
+           sodipodi:ry="0.8046875"
+           d="M 5.8125,8.2578125 A 0.546875,0.8046875 0 1 1 4.71875,8.2578125 A 0.546875,0.8046875 0 1 1 5.8125,8.2578125 z"
+           transform="matrix(1.3714287,0,0,0.9320388,4.0970367,3.7163106)" />
+      </g>
+      <g
+         transform="translate(-60,6)"
+         id="g6186">
+        <path
+           style="fill:none;fill-opacity:1;stroke:url(#radialGradient6252);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 5.65625,8.5 C 5.0125701,10.711334 6.4451242,12.5 8.84375,12.5 C 9.757344,12.5 10.672765,12.22474 11.5,11.78125"
+           id="path6188"
+           sodipodi:nodetypes="csc" />
+        <path
+           style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 6.84375,6.5 C 6.2961784,7.0922996 5.8701722,7.7650799 5.65625,8.5 C 5.0125701,10.711334 6.4451242,12.5 8.84375,12.5 C 9.757344,12.5 10.672765,12.22474 11.5,11.78125"
+           id="path6190"
+           sodipodi:nodetypes="cssc" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6192"
+           sodipodi:cx="5.265625"
+           sodipodi:cy="8.2578125"
+           sodipodi:rx="0.546875"
+           sodipodi:ry="0.8046875"
+           d="M 5.8125,8.2578125 A 0.546875,0.8046875 0 1 1 4.71875,8.2578125 A 0.546875,0.8046875 0 1 1 5.8125,8.2578125 z"
+           transform="matrix(1.3714287,0,0,0.9320388,-1.7365942,0.3133592)" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:0.7;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6194"
+           sodipodi:cx="5.265625"
+           sodipodi:cy="8.2578125"
+           sodipodi:rx="0.546875"
+           sodipodi:ry="0.8046875"
+           d="M 5.8125,8.2578125 A 0.546875,0.8046875 0 1 1 4.71875,8.2578125 A 0.546875,0.8046875 0 1 1 5.8125,8.2578125 z"
+           transform="matrix(1.3714287,0,0,0.9320388,4.0970367,3.7163106)" />
+      </g>
+      <path
+         id="path6196"
+         d="M -36.126698,24.53508 C -36.126707,25.493883 -35.930629,26.250007 -35.538462,26.803454 C -35.138775,27.35691 -34.599559,27.633635 -33.920815,27.633632 C -33.249636,27.633635 -32.714192,27.35691 -32.314481,26.803454 C -31.914796,26.242212 -31.714946,25.486088 -31.714933,24.53508 C -31.714946,23.591881 -31.918567,22.84745 -32.325793,22.301784 C -32.725504,21.748342 -33.264719,21.471616 -33.94344,21.471606 C -34.607101,21.471616 -35.138775,21.748342 -35.538462,22.301784 C -35.930629,22.84745 -36.126707,23.591881 -36.126698,24.53508 M -31.488688,28.054567 C -31.714946,28.608021 -32.080708,29.040649 -32.585974,29.352452 C -33.083724,29.656461 -33.668188,29.808466 -34.339367,29.808465 C -35.636511,29.808466 -36.692318,29.32517 -37.506788,28.358577 C -38.313733,27.384192 -38.717202,26.11749 -38.717195,24.558466 C -38.717202,22.999454 -38.309963,21.732752 -37.495476,20.758355 C -36.681005,19.783979 -35.62897,19.296786 -34.339367,19.296774 C -33.668188,19.296786 -33.083724,19.452687 -32.585974,19.76448 C -32.080708,20.076295 -31.714946,20.508922 -31.488688,21.062364 L -31.488688,19.530628 L -29.124436,19.530628 L -29.124436,27.633632 C -28.189309,27.485529 -27.454016,27.021721 -26.918553,26.242207 C -26.383127,25.454907 -26.115405,24.449341 -26.115386,23.225504 C -26.115405,22.446002 -26.224756,21.717161 -26.44344,21.038978 C -26.662162,20.353021 -26.993986,19.725515 -27.438915,19.156462 C -28.155373,18.205473 -29.052807,17.472734 -30.131223,16.958244 C -31.202127,16.443783 -32.363513,16.186544 -33.615386,16.18653 C -34.490208,16.186544 -35.327311,16.307368 -36.126698,16.549002 C -36.926103,16.782869 -37.665167,17.12975 -38.343892,17.589648 C -39.460037,18.35358 -40.331077,19.343556 -40.957014,20.55958 C -41.575419,21.767829 -41.88462,23.077404 -41.884616,24.48831 C -41.88462,25.649785 -41.68477,26.741097 -41.285069,27.762252 C -40.877833,28.775616 -40.293369,29.672052 -39.531674,30.45156 C -38.777533,31.21548 -37.914035,31.796214 -36.941178,32.193765 C -35.960794,32.599108 -34.9163,32.80178 -33.807693,32.801782 C -32.857479,32.80178 -31.907254,32.618596 -30.957015,32.252228 C -30.006803,31.885858 -29.196096,31.390869 -28.524888,30.767262 L -27.314481,32.661471 C -28.257182,33.417593 -29.286594,33.99443 -30.402716,34.391983 C -31.511327,34.797324 -32.638777,34.999996 -33.785069,35.000001 C -35.180253,34.999996 -36.496239,34.742758 -37.733033,34.228286 C -38.969842,33.721602 -40.070896,32.981068 -41.0362,32.006683 C -42.001512,31.032295 -42.736806,29.905905 -43.242082,28.627507 C -43.747362,27.341319 -44.000001,25.961588 -44,24.48831 C -44.000001,23.06961 -43.743592,21.717161 -43.230769,20.430961 C -42.717952,19.144782 -41.98643,18.014493 -41.0362,17.040093 C -40.085979,16.073515 -38.981154,15.325187 -37.72172,14.795104 C -36.454761,14.265054 -35.142545,14.000022 -33.785069,14.000005 C -32.095791,14.000022 -30.561102,14.33521 -29.180997,15.005572 C -27.800924,15.668171 -26.647078,16.626967 -25.719458,17.881963 C -25.153867,18.645896 -24.727775,19.476073 -24.441178,20.372497 C -24.147081,21.261148 -24.000023,22.196559 -24.000001,23.178734 C -24.000023,25.29121 -24.614652,26.932078 -25.843892,28.101338 C -27.073172,29.270604 -28.80771,29.855237 -31.047513,29.855236 L -31.488688,29.855236 L -31.488688,28.054567"
+         style="font-size:23.55376053px;font-style:normal;font-weight:normal;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" />
+      <g
+         transform="translate(-60,0)"
+         id="g6198">
+        <path
+           style="fill:none;fill-opacity:1;stroke:url(#radialGradient6254);stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 5.65625,8.5 C 5.0125701,10.711334 6.4451242,12.5 8.84375,12.5 C 9.757344,12.5 10.672765,12.22474 11.5,11.78125"
+           id="path6200"
+           sodipodi:nodetypes="csc" />
+        <path
+           style="fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           d="M 6.84375,6.5 C 6.2961784,7.0922996 5.8701722,7.7650799 5.65625,8.5 C 5.0125701,10.711334 6.4451242,12.5 8.84375,12.5 C 9.757344,12.5 10.672765,12.22474 11.5,11.78125"
+           id="path6202"
+           sodipodi:nodetypes="cssc" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6204"
+           sodipodi:cx="5.265625"
+           sodipodi:cy="8.2578125"
+           sodipodi:rx="0.546875"
+           sodipodi:ry="0.8046875"
+           d="M 5.8125,8.2578125 A 0.546875,0.8046875 0 1 1 4.71875,8.2578125 A 0.546875,0.8046875 0 1 1 5.8125,8.2578125 z"
+           transform="matrix(1.3714287,0,0,0.9320388,-1.7365942,0.3133592)" />
+        <path
+           sodipodi:type="arc"
+           style="opacity:0.7;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           id="path6206"
+           sodipodi:cx="5.265625"
+           sodipodi:cy="8.2578125"
+           sodipodi:rx="0.546875"
+           sodipodi:ry="0.8046875"
+           d="M 5.8125,8.2578125 A 0.546875,0.8046875 0 1 1 4.71875,8.2578125 A 0.546875,0.8046875 0 1 1 5.8125,8.2578125 z"
+           transform="matrix(1.3714287,0,0,0.9320388,4.0970367,3.7163106)" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/sflphone-gtk/pixmaps/contact_default.svg b/sflphone-gtk/pixmaps/contact_default.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5e4938e22ee323ae1ad150d62375525b1f8094f6
--- /dev/null
+++ b/sflphone-gtk/pixmaps/contact_default.svg
@@ -0,0 +1,312 @@
+<?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="svg2108"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docbase="/home/dobey/Projects/gnome-icon-theme/scalable/stock/generic"
+   sodipodi:docname="stock_person.svg"
+   inkscape:export-filename="/home/jimmac/src/cvs/gnome/gnome-icon-theme/48x48/stock/generic/stock_person.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.0">
+  <defs
+     id="defs3">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 24 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="48 : 24 : 1"
+       inkscape:persp3d-origin="24 : 16 : 1"
+       id="perspective39" />
+    <linearGradient
+       id="linearGradient4562">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop4564" />
+      <stop
+         style="stop-color:#d6d6d2;stop-opacity:1;"
+         offset="1"
+         id="stop4566" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4356">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4358" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4360" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3824">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3826" />
+      <stop
+         style="stop-color:#c9c9c9;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3828" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3816">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3818" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop3820" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3816"
+       id="radialGradient3822"
+       cx="31.112698"
+       cy="19.008621"
+       fx="31.112698"
+       fy="19.008621"
+       r="8.6620579"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4356"
+       id="linearGradient4362"
+       x1="20.661695"
+       y1="35.817974"
+       x2="22.626925"
+       y2="36.217758"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4574725,8.6573699e-2,-8.4475822e-2,0.4688334,-3.7001476,-5.7438166)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4356"
+       id="linearGradient4366"
+       gradientUnits="userSpaceOnUse"
+       x1="22.686766"
+       y1="36.3904"
+       x2="21.408455"
+       y2="35.739632"
+       gradientTransform="matrix(-0.4548256,0.1001553,9.7728308e-2,0.4661207,19.475571,-6.1586599)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4356"
+       id="linearGradient1366"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4548256,0.1001553,9.7728308e-2,0.4661207,13.107279,-9.3553728)"
+       x1="22.686766"
+       y1="36.3904"
+       x2="21.408455"
+       y2="35.739632" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3824"
+       id="linearGradient1372"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4652065,0,0,0.4767595,-12.117924,-7.3917619)"
+       x1="30.935921"
+       y1="29.553486"
+       x2="30.935921"
+       y2="35.803486" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4562"
+       id="radialGradient4568"
+       cx="24.753788"
+       cy="26.814409"
+       fx="24.753788"
+       fy="26.814409"
+       r="17.986025"
+       gradientTransform="matrix(0.4708262,0,-1.1611519e-8,0.4867499,-3.5907712,-3.5342702)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4562"
+       id="radialGradient3816"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.558489,0,-1.377346e-8,0.563387,14.87134,4.364123)"
+       cx="29.922075"
+       cy="17.727694"
+       fx="29.922075"
+       fy="17.727694"
+       r="17.986025" />
+    <filter
+       inkscape:collect="always"
+       x="-0.076111108"
+       width="1.1522222"
+       y="-0.28344828"
+       height="1.5668966"
+       id="filter5655">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.4531044"
+         id="feGaussianBlur5657" />
+    </filter>
+  </defs>
+  <sodipodi:namedview
+     inkscape:showpageshadow="false"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.16862745"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="4"
+     inkscape:cx="14.000535"
+     inkscape:cy="28.945566"
+     inkscape:current-layer="layer2"
+     showgrid="false"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     fill="#9db029"
+     stroke="#727e0a"
+     inkscape:window-width="872"
+     inkscape:window-height="815"
+     inkscape:window-x="207"
+     inkscape:window-y="92"
+     borderlayer="true" />
+  <metadata
+     id="metadata4">
+    <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>Person</dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:source>http://jimmac.musichall.cz</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>user</rdf:li>
+            <rdf:li>person</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Notice" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/ShareAlike" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/SourceCode" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="cipek"
+     inkscape:groupmode="layer"
+     style="display:inline">
+    <path
+       style="opacity:1;fill:url(#linearGradient1372);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 4.1651393,8.8345802 L 6.138843,8.8345802 L 4.9875164,7.7389402 L 4.7408031,8.0760604 L 4.4940899,7.8232205 L 4.1651393,8.8345802 z"
+       id="path4173" />
+    <path
+       sodipodi:nodetypes="cccc"
+       id="path4370"
+       d="M 6.430587,11.556284 C 7.003373,11.279297 7.269997,10.601658 7.269997,10.601658 C 6.823808,8.674127 5.420266,7.3392773 5.420266,7.3392773 C 5.420266,7.3392773 6.566811,10.363174 6.430587,11.556284 z"
+       style="opacity:0.22784807;fill:url(#linearGradient1366);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="dalsi cipek"
+     style="display:inline">
+    <rect
+       style="opacity:0.34857142;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible;filter:url(#filter5655);enable-background:accumulate"
+       id="rect4608"
+       width="38.183765"
+       height="10.253048"
+       x="5.3033009"
+       y="35.448853"
+       rx="5.126524"
+       ry="5.126524"
+       transform="matrix(0.3250676,0,0,0.3331404,6.89512e-2,0.7930955)" />
+    <path
+       style="opacity:1;fill:url(#radialGradient4568);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:0.35188666px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 5.747901,15.484233 L 10.682162,15.484233 C 12.080203,15.484233 13.464322,14.958876 13.971669,13.461513 C 14.453455,12.03959 14.053907,9.331795 10.928875,7.1405156 L 5.0899998,7.1405156 C 1.9649683,9.1632345 1.5744381,11.929484 2.2939191,13.545793 C 3.0268962,15.19242 4.2676231,15.484233 5.747901,15.484233 z"
+       id="path4308"
+       sodipodi:nodetypes="cczcczc" />
+    <path
+       sodipodi:nodetypes="cccc"
+       id="path4364"
+       d="M 12.79888,14.752996 C 13.371666,14.476009 13.638289,13.79837 13.638289,13.79837 C 13.1921,11.870839 11.788558,10.53599 11.788558,10.53599 C 11.788558,10.53599 12.935103,13.559886 12.79888,14.752996 z"
+       style="opacity:0.29120878;fill:url(#linearGradient4366);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       inkscape:r_cx="true"
+       inkscape:r_cy="true" />
+    <path
+       style="opacity:0.54945056;fill:url(#linearGradient4362);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 3.5664124,14.960262 C 2.9860173,14.700442 2.7262518,14.07431 2.7262518,14.07431 C 3.1176214,12.134311 4.4567857,10.714959 4.4567857,10.714959 C 4.4567857,10.714959 3.3964304,13.77171 3.5664124,14.960262 z"
+       id="path4354"
+       sodipodi:nodetypes="cccc"
+       inkscape:r_cx="true"
+       inkscape:r_cy="true" />
+    <path
+       sodipodi:nodetypes="cczcczc"
+       id="path4314"
+       d="M 5.634667,15.115814 L 10.684449,15.104916 C 11.954768,15.104916 13.212438,14.627555 13.673434,13.266988 C 14.111206,11.974967 13.627851,9.514549 10.788314,7.5234596 L 5.2422484,7.4035828 C 2.4027116,9.2415112 1.8531144,11.755044 2.5174989,13.343568 C 3.1818841,14.932092 4.1513831,15.104916 5.634667,15.115814 z"
+       style="opacity:0.64285715;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.35188669px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <path
+       d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+       sodipodi:ry="8.6620579"
+       sodipodi:rx="8.6620579"
+       sodipodi:cy="19.008621"
+       sodipodi:cx="31.112698"
+       id="path4318"
+       style="opacity:1;fill:url(#radialGradient3822);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       sodipodi:type="arc"
+       transform="matrix(0.4652065,0,0,0.4767595,-6.3991871,-2.6974863)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient3816);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:0.74718857px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path4320"
+       sodipodi:cx="31.112698"
+       sodipodi:cy="19.008621"
+       sodipodi:rx="8.6620579"
+       sodipodi:ry="8.6620579"
+       d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+       transform="matrix(0.4652065,0,0,0.4767595,-6.3410376,-4.366146)" />
+    <path
+       d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+       sodipodi:ry="8.6620579"
+       sodipodi:rx="8.6620579"
+       sodipodi:cy="19.008621"
+       sodipodi:cx="31.112698"
+       id="path4322"
+       style="opacity:0.19620254;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.82296228px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       sodipodi:type="arc"
+       transform="matrix(0.4223732,0,0,0.4328624,-5.0083678,-3.5317177)" />
+  </g>
+</svg>
diff --git a/sflphone-gtk/pixmaps/face-monkey.svg b/sflphone-gtk/pixmaps/face-monkey.svg
new file mode 100644
index 0000000000000000000000000000000000000000..819282da548f151ebb1e36fd8839063eb9c2ddf7
--- /dev/null
+++ b/sflphone-gtk/pixmaps/face-monkey.svg
@@ -0,0 +1,583 @@
+<?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://web.resource.org/cc/"
+   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="48"
+   height="48"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   version="1.0"
+   sodipodi:docbase="/home/lapo/Icone/gnome-icon-theme/scalable/emotes"
+   sodipodi:docname="face-monkey.svg"
+   inkscape:export-filename="/home/andreas/project/gnome-icon-theme/22x22/emotes/face-monkey.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient7033">
+      <stop
+         style="stop-color:#533401;stop-opacity:1;"
+         offset="0"
+         id="stop7035" />
+      <stop
+         style="stop-color:#533401;stop-opacity:0;"
+         offset="1"
+         id="stop7037" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient7025">
+      <stop
+         style="stop-color:#533401;stop-opacity:1;"
+         offset="0"
+         id="stop7027" />
+      <stop
+         style="stop-color:#533401;stop-opacity:0;"
+         offset="1"
+         id="stop7029" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6971">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6973" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop6975" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6107">
+      <stop
+         style="stop-color:#e9b96e;stop-opacity:1;"
+         offset="0"
+         id="stop6109" />
+      <stop
+         id="stop6115"
+         offset="0.78742659"
+         style="stop-color:#e9b96e;stop-opacity:1;" />
+      <stop
+         style="stop-color:#8f5902;stop-opacity:1"
+         offset="1"
+         id="stop6111" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6067">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop6069" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1"
+         offset="1"
+         id="stop6071" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6044">
+      <stop
+         style="stop-color:#a40000;stop-opacity:1;"
+         offset="0"
+         id="stop6046" />
+      <stop
+         style="stop-color:#a40000;stop-opacity:0;"
+         offset="1"
+         id="stop6048" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6026">
+      <stop
+         style="stop-color:#efca8e;stop-opacity:1"
+         offset="0"
+         id="stop6028" />
+      <stop
+         style="stop-color:#e9b768;stop-opacity:1"
+         offset="1"
+         id="stop6030" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6016">
+      <stop
+         style="stop-color:#c17d11;stop-opacity:1;"
+         offset="0"
+         id="stop6018" />
+      <stop
+         style="stop-color:#9a640d;stop-opacity:1"
+         offset="1"
+         id="stop6020" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5992">
+      <stop
+         style="stop-color:#8f5902;stop-opacity:1;"
+         offset="0"
+         id="stop5994" />
+      <stop
+         style="stop-color:#744800;stop-opacity:1"
+         offset="1"
+         id="stop5996" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3398">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3400" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.02568627"
+         offset="1"
+         id="stop3402" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3390">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3392" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3394" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3150">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop3152" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:0;"
+         offset="1"
+         id="stop3154" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3150"
+       id="radialGradient3363"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.842757,0,0,-0.35721,19.80716,14.19321)"
+       cx="10.748654"
+       cy="10.457643"
+       fx="10.748654"
+       fy="10.457643"
+       r="6.6449099" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3390"
+       id="radialGradient3396"
+       cx="16.571363"
+       cy="4.5158162"
+       fx="16.571363"
+       fy="4.5158162"
+       r="6.96875"
+       gradientTransform="matrix(1.9142934,2.2544079e-3,-2.8759152e-3,2.4420352,-13.23958,-8.6794257)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3398"
+       id="linearGradient3404"
+       x1="8.3736019"
+       y1="2.9100885"
+       x2="25.498098"
+       y2="43.464977"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5992"
+       id="linearGradient5998"
+       x1="6.5056138"
+       y1="4.1361318"
+       x2="14.195889"
+       y2="20.028084"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.0758542,0,0,2.0526248,1.1655453,1.4208674)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5992"
+       id="linearGradient6006"
+       x1="4.5483284"
+       y1="2.2576585"
+       x2="7.2317519"
+       y2="8.2374868"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5992"
+       id="linearGradient6014"
+       x1="3.1526313"
+       y1="2.9913363"
+       x2="5.5769644"
+       y2="7.6185937"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6016"
+       id="radialGradient6022"
+       cx="10.148121"
+       cy="9.4611959"
+       fx="10.148121"
+       fy="9.4611959"
+       r="8.0000286"
+       gradientTransform="matrix(2.0487225,-0.3333485,0.4394892,2.6401809,-2.7172146,-1.5449635)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6044"
+       id="radialGradient6050"
+       cx="11.228074"
+       cy="16.211924"
+       fx="11.228074"
+       fy="16.211924"
+       r="2.6223004"
+       gradientTransform="matrix(1,0,0,0.423375,0,9.3482007)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6026"
+       id="radialGradient6021"
+       cx="15.086278"
+       cy="12.519321"
+       fx="15.086278"
+       fy="12.519321"
+       r="9"
+       gradientTransform="matrix(-2.3334053,0.210666,-0.1418036,-1.6936244,60.083985,39.649881)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3398"
+       id="linearGradient6085"
+       gradientUnits="userSpaceOnUse"
+       x1="2.5554368"
+       y1="2.1035039"
+       x2="6.3627462"
+       y2="7.6472335" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3398"
+       id="linearGradient6089"
+       gradientUnits="userSpaceOnUse"
+       x1="7.5647373"
+       y1="2.6741056"
+       x2="5.5855722"
+       y2="4.8494081" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6107"
+       id="radialGradient6113"
+       cx="5.7251329"
+       cy="5.8061638"
+       fx="5.7251329"
+       fy="5.8061638"
+       r="3.8391297"
+       gradientTransform="matrix(1,0,0,0.9190153,0,0.4344651)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6107"
+       id="radialGradient6123"
+       cx="5.3649516"
+       cy="5.9023771"
+       fx="5.3649516"
+       fy="5.9023771"
+       r="3.8391297"
+       gradientTransform="matrix(1,0,0,0.9190153,0,0.4344651)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6067"
+       id="radialGradient5994"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.5438597,0,-5.3589507)"
+       cx="10.279492"
+       cy="9.8535538"
+       fx="10.279492"
+       fy="9.8535538"
+       r="1.1076201" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6067"
+       id="radialGradient5996"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.5438597,0,-5.3589507)"
+       cx="10.279492"
+       cy="9.8535538"
+       fx="10.279492"
+       fy="9.8535538"
+       r="1.1076201" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6971"
+       id="radialGradient6977"
+       cx="24.466648"
+       cy="34.233986"
+       fx="24.466648"
+       fy="34.233986"
+       r="9.997899"
+       gradientTransform="matrix(1,0,0,0.1477394,0,25.308958)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7025"
+       id="linearGradient7031"
+       x1="20.96875"
+       y1="23.8125"
+       x2="20.96875"
+       y2="26.067919"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,-2)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7033"
+       id="linearGradient7039"
+       x1="26.59375"
+       y1="23.8125"
+       x2="26.546921"
+       y2="25.90625"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,-2)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#f28f8f"
+     borderopacity="1"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="16"
+     inkscape:cx="30.290912"
+     inkscape:cy="15.731532"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fill="#eeeeec"
+     inkscape:window-width="1280"
+     inkscape:window-height="925"
+     inkscape:window-x="5"
+     inkscape:window-y="24"
+     width="48px"
+     height="48px"
+     inkscape:object-paths="true"
+     inkscape:object-nodes="true"
+     objecttolerance="12"
+     gridtolerance="8"
+     guidetolerance="6"
+     inkscape:showpageshadow="false"
+     showborder="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid5394"
+       spacingx="0.5px"
+       spacingy="0.5px"
+       empspacing="2" />
+  </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:license
+           rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+        <dc:title>face-monkey</dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Ulisse Perusin</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:contributor>
+          <cc:Agent>
+            <dc:title>based on the work of someone who didn't fill the metadata...</dc:title>
+          </cc:Agent>
+        </dc:contributor>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>emotes</rdf:li>
+            <rdf:li>monkey</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient6113);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6014);stroke-width:0.56617205999999998;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3342"
+       sodipodi:cx="5.5769644"
+       sodipodi:cy="5.3647771"
+       sodipodi:rx="3.5560436"
+       sodipodi:ry="3.2451327"
+       d="M 9.133008,5.3647771 A 3.5560436,3.2451327 0 1 1 2.0209208,5.3647771 A 3.5560436,3.2451327 0 1 1 9.133008,5.3647771 z"
+       transform="matrix(1.6872684,0,0,1.8489229,-0.909836,10.580941)" />
+    <path
+       transform="matrix(1.406057,0,0,1.5431057,0.5959699,12.229164)"
+       style="opacity:0.37647059;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6085);stroke-width:0.67889196;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 9.133008,5.3647771 C 9.133008,7.1560903 7.5399005,8.6099098 5.5769644,8.6099098 C 3.6140283,8.6099098 2.0209208,7.1560903 2.0209208,5.3647771 C 2.0209208,3.5734638 3.6140283,2.1196444 5.5769644,2.1196444 C 7.5399005,2.1196444 9.133008,3.5734638 9.133008,5.3647771 z "
+       id="path6083" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.29999999999999999;fill:#5c3566;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3359"
+       sodipodi:cx="4.2750249"
+       sodipodi:cy="8.4155903"
+       sodipodi:rx="2.0597849"
+       sodipodi:ry="1.3602352"
+       d="M 6.3348098,8.4155903 A 2.0597849,1.3602352 0 1 1 2.21524,8.4155903 A 2.0597849,1.3602352 0 1 1 6.3348098,8.4155903 z"
+       transform="matrix(1.8498752,0,0,2.9620487,1.9020826,-3.8983056)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient6123);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6006);stroke-width:0.56617187999999996;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3344"
+       sodipodi:cx="5.5769644"
+       sodipodi:cy="5.3647771"
+       sodipodi:rx="3.5560436"
+       sodipodi:ry="3.2451327"
+       d="M 9.133008,5.3647771 A 3.5560436,3.2451327 0 1 1 2.0209208,5.3647771 A 3.5560436,3.2451327 0 1 1 9.133008,5.3647771 z"
+       transform="matrix(1.6872685,0,0,1.848923,30.090164,10.58094)" />
+    <path
+       style="opacity:0.25098039;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 37.357012,14.339669 C 38.272734,14.091905 39.199186,13.892425 40.197153,14.014764 C 40.072526,16.747787 39.494573,19.332396 39.024372,22.090832 C 40.71531,23.5377 41.427614,25.01852 42,26.5 C 41.323974,26.812313 40.227723,27.081771 39.069306,27 C 36.266476,23.990483 34.743011,20.018762 37.357012,14.339669 z"
+       id="path6042"
+       sodipodi:nodetypes="cccccc" />
+    <path
+       transform="matrix(1.406057,0,0,1.5431057,31.59597,12.229164)"
+       style="opacity:0.37647059;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6089);stroke-width:0.67889196;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 9.133008,5.3647771 C 9.133008,7.1560903 7.5399005,8.6099098 5.5769644,8.6099098 C 3.6140283,8.6099098 2.0209208,7.1560903 2.0209208,5.3647771 C 2.0209208,3.5734638 3.6140283,2.1196444 5.5769644,2.1196444 C 7.5399005,2.1196444 9.133008,3.5734638 9.133008,5.3647771 z "
+       id="path6087" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.3;fill:#5c3566;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3361"
+       sodipodi:cx="4.2750249"
+       sodipodi:cy="8.4155903"
+       sodipodi:rx="2.0597849"
+       sodipodi:ry="1.3602352"
+       d="M 6.3348098,8.4155903 A 2.0597849,1.3602352 0 1 1 2.21524,8.4155903 A 2.0597849,1.3602352 0 1 1 6.3348098,8.4155903 z"
+       transform="matrix(1.8869741,0,0,2.9576809,30.046378,-3.8505306)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.6;fill:url(#radialGradient3363);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3140"
+       sodipodi:cx="10.748654"
+       sodipodi:cy="10.457643"
+       sodipodi:rx="6.6449099"
+       sodipodi:ry="2.3675451"
+       d="M 17.393564,10.457643 A 6.6449099,2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099,2.3675451 0 1 1 17.393564,10.457643 z"
+       transform="matrix(3.0098139,0,0,2.9630238,-8.3758807,8.9986641)" />
+    <path
+       style="fill:url(#radialGradient6022);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5998);stroke-width:1.00000011999999994;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 24.007921,4.4999999 C 15.737268,4.4999999 10.522194,9.0672863 10.522193,16.535901 L 11.544815,23.99974 C 9.3634284,25.095588 8.4310344,28.104989 8.4310344,31.183926 C 8.4310344,37.162551 13.62067,43.433324 24.014827,43.499468 C 34.544937,43.567169 39.568848,37.162551 39.568845,31.183926 C 39.582185,28.101693 38.486594,25.240757 36.455064,23.99974 L 37.507459,16.535901 C 37.507459,8.7636853 32.278573,4.4999999 24.007921,4.4999999 z"
+       id="path3346"
+       sodipodi:nodetypes="ccccscccs" />
+    <path
+       style="opacity:0.5;fill:url(#radialGradient3396);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3404);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 24,5.53125 C 20.051508,5.53125 16.952589,6.5940986 14.84375,8.46875 C 12.734911,10.343401 11.5625,13.032657 11.5625,16.53125 L 12.53125,23.875 C 12.587063,24.29599 12.375182,24.707288 12,24.90625 C 11.192274,25.312021 10.563506,26.102241 10.125,27.21875 C 9.6864936,28.335259 9.46875,29.748389 9.46875,31.1875 C 9.4687503,36.580578 14.01212,42.405191 24,42.46875 C 34.116273,42.533788 38.531253,36.59598 38.53125,31.1875 C 38.543556,28.344349 37.511683,25.836634 35.9375,24.875 C 35.597929,24.663086 35.414403,24.271563 35.46875,23.875 L 36.46875,16.53125 C 36.46875,12.873011 35.296173,10.209067 33.1875,8.375 C 31.078827,6.540933 27.960923,5.53125 24,5.53125 z "
+       id="path3380" />
+    <path
+       style="opacity:1;fill:url(#radialGradient6021);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 18.944444,13.001625 C 15.356444,13.001625 13.888889,15.443388 13.888889,19.001301 C 13.888889,20.780259 14.378332,22.631569 14.989583,24.000895 C 12.010416,24.806582 9.9375,25.813313 9.9375,31.063029 C 9.9375,35.806909 16,41 24,41 C 32,41 38.03125,35.744409 38.03125,31.000529 C 38.03125,26.500773 35.989585,24.775332 33.010416,23.969645 C 33.732639,22.469725 34.111111,20.780259 34.111111,19.001301 C 34.111111,15.443388 32.642185,13.099954 29.055555,13.001625 C 26.872133,12.942584 24.722221,14.501545 24.059542,16.075628 C 23.277778,14.501545 21.301818,13.060668 18.944444,13.001625 z "
+       id="path3357"
+       sodipodi:nodetypes="cscssscsscc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.22000002;fill:url(#radialGradient6050);fill-opacity:1;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path5982"
+       sodipodi:cx="11.228074"
+       sodipodi:cy="16.211924"
+       sodipodi:rx="2.6223004"
+       sodipodi:ry="1.1102164"
+       d="M 13.850374 16.211924 A 2.6223004 1.1102164 0 1 1  8.6057737,16.211924 A 2.6223004 1.1102164 0 1 1  13.850374 16.211924 z"
+       transform="matrix(2.6729049,0,0,2.2640107,-6.0896987,-16.21751)" />
+    <path
+       style="opacity:0.5;fill:url(#radialGradient6977);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 33.995257,28.078681 C 34.038381,31.739813 31.509745,30.918015 24.08169,30.92737 C 16.661276,30.936716 14,31.647754 14,28.045833 C 15.566613,29.578661 17.158297,29.505774 24.08169,29.486602 C 31.011105,29.467413 32.659269,29.624691 33.995257,28.078681 z "
+       id="path6969"
+       sodipodi:nodetypes="czczc" />
+    <path
+       style="opacity:1;fill:#503201;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 33.995257,28.068134 C 34.038381,30.553717 31.509745,29.995789 24.08169,30.00214 C 16.661276,30.008485 14,30.491217 14,28.045833 C 15.566613,29.086487 17.158297,29.037003 24.08169,29.023987 C 31.011105,29.010959 32.659269,29.117737 33.995257,28.068134 z "
+       id="path2186"
+       sodipodi:nodetypes="czczc" />
+    <g
+       id="g5986"
+       transform="translate(2,0)">
+      <path
+         transform="matrix(1.8056732,0,0,1.1695839,-0.5614042,6.4754422)"
+         d="M 11.387112 9.8535538 A 1.1076201 1.7100101 0 1 1  9.1718723,9.8535538 A 1.1076201 1.7100101 0 1 1  11.387112 9.8535538 z"
+         sodipodi:ry="1.7100101"
+         sodipodi:rx="1.1076201"
+         sodipodi:cy="9.8535538"
+         sodipodi:cx="10.279492"
+         id="path6024"
+         style="opacity:1;fill:url(#radialGradient5996);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.79457355;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(2.3209022,0,0,2.4214654,3.3518098,-3.7210354)"
+         d="M 6.5000002 8.5870266 A 0.43086693 0.41297308 0 1 1  5.6382664,8.5870266 A 0.43086693 0.41297308 0 1 1  6.5000002 8.5870266 z"
+         sodipodi:ry="0.41297308"
+         sodipodi:rx="0.43086693"
+         sodipodi:cy="8.5870266"
+         sodipodi:cx="6.0691333"
+         id="path5974"
+         style="opacity:0.43921569;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+    </g>
+    <g
+       id="g5990"
+       transform="translate(-2,0)">
+      <path
+         transform="matrix(1.8056732,0,0,1.1695839,11.438596,6.4754422)"
+         d="M 11.387112 9.8535538 A 1.1076201 1.7100101 0 1 1  9.1718723,9.8535538 A 1.1076201 1.7100101 0 1 1  11.387112 9.8535538 z"
+         sodipodi:ry="1.7100101"
+         sodipodi:rx="1.1076201"
+         sodipodi:cy="9.8535538"
+         sodipodi:cx="10.279492"
+         id="path3340"
+         style="opacity:1;fill:url(#radialGradient5994);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(2.2384755,0,0,2.414016,15.878879,-3.732296)"
+         d="M 6.5000002 8.5870266 A 0.43086693 0.41297308 0 1 1  5.6382664,8.5870266 A 0.43086693 0.41297308 0 1 1  6.5000002 8.5870266 z"
+         sodipodi:ry="0.41297308"
+         sodipodi:rx="0.43086693"
+         sodipodi:cy="8.5870266"
+         sodipodi:cx="6.0691333"
+         id="path5976"
+         style="opacity:0.43921569;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+    </g>
+    <path
+       style="opacity:1;fill:url(#linearGradient7031);fill-opacity:1;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 21.5,21.8125 C 20.672,21.8125 20,22.523051 20,23.40625 C 20,23.417181 19.999795,23.426621 20,23.4375 C 20.700987,23.138082 21.727934,22.928798 22.90625,22.84375 C 22.6946,22.233767 22.14515,21.812499 21.5,21.8125 z "
+       id="path6979" />
+    <path
+       style="opacity:1;fill:url(#linearGradient7039);fill-opacity:1;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 26.5,21.8125 C 25.85485,21.812499 25.3054,22.233767 25.09375,22.84375 C 26.272066,22.928798 27.299013,23.138082 28,23.4375 C 28.000205,23.426621 28,23.417181 28,23.40625 C 28,22.523051 27.328,21.8125 26.5,21.8125 z "
+       id="path6997" />
+  </g>
+</svg>
diff --git a/sflphone-gtk/pixmaps/home.svg b/sflphone-gtk/pixmaps/home.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3520b510cd2e9eb6a033b04cd739cf8db8c6dd36
--- /dev/null
+++ b/sflphone-gtk/pixmaps/home.svg
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   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="48"
+   height="48"
+   overflow="visible"
+   enable-background="new 0 0 128 129.396"
+   xml:space="preserve"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.43+devel"
+   sodipodi:docname="go-home.svg"
+   sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/actions"
+   version="1.0"
+   inkscape:export-filename="/home/tigert/My Downloads/go-home.png"
+   inkscape:export-xdpi="90.000000"
+   inkscape:export-ydpi="90.000000"><metadata
+   id="metadata367"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><cc:license
+         rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" /><dc:title>Go Home</dc:title><dc:creator><cc:Agent><dc:title>Jakub Steiner</dc:title></cc:Agent></dc:creator><dc:source>http://jimmac.musichall.cz</dc:source><dc:subject><rdf:Bag><rdf:li>home</rdf:li><rdf:li>return</rdf:li><rdf:li>go</rdf:li><rdf:li>default</rdf:li><rdf:li>user</rdf:li><rdf:li>directory</rdf:li></rdf:Bag></dc:subject><dc:contributor><cc:Agent><dc:title>Tuomas Kuosmanen</dc:title></cc:Agent></dc:contributor></cc:Work><cc:License
+       rdf:about="http://creativecommons.org/licenses/by-sa/2.0/"><cc:permits
+         rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits
+         rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires
+         rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires
+         rdf:resource="http://web.resource.org/cc/Attribution" /><cc:permits
+         rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires
+         rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></metadata><defs
+   id="defs365"><radialGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient5060"
+     id="radialGradient5031"
+     gradientUnits="userSpaceOnUse"
+     gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+     cx="605.71429"
+     cy="486.64789"
+     fx="605.71429"
+     fy="486.64789"
+     r="117.14286" /><linearGradient
+     inkscape:collect="always"
+     id="linearGradient5060"><stop
+       style="stop-color:black;stop-opacity:1;"
+       offset="0"
+       id="stop5062" /><stop
+       style="stop-color:black;stop-opacity:0;"
+       offset="1"
+       id="stop5064" /></linearGradient><radialGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient5060"
+     id="radialGradient5029"
+     gradientUnits="userSpaceOnUse"
+     gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+     cx="605.71429"
+     cy="486.64789"
+     fx="605.71429"
+     fy="486.64789"
+     r="117.14286" /><linearGradient
+     id="linearGradient5048"><stop
+       style="stop-color:black;stop-opacity:0;"
+       offset="0"
+       id="stop5050" /><stop
+       id="stop5056"
+       offset="0.5"
+       style="stop-color:black;stop-opacity:1;" /><stop
+       style="stop-color:black;stop-opacity:0;"
+       offset="1"
+       id="stop5052" /></linearGradient><linearGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient5048"
+     id="linearGradient5027"
+     gradientUnits="userSpaceOnUse"
+     gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+     x1="302.85715"
+     y1="366.64789"
+     x2="302.85715"
+     y2="609.50507" /><linearGradient
+     id="linearGradient2406"><stop
+       style="stop-color:#7c7e79;stop-opacity:1;"
+       offset="0"
+       id="stop2408" /><stop
+       id="stop2414"
+       offset="0.1724138"
+       style="stop-color:#848681;stop-opacity:1;" /><stop
+       style="stop-color:#898c86;stop-opacity:1;"
+       offset="1"
+       id="stop2410" /></linearGradient><linearGradient
+     inkscape:collect="always"
+     id="linearGradient2390"><stop
+       style="stop-color:#919191;stop-opacity:1;"
+       offset="0"
+       id="stop2392" /><stop
+       style="stop-color:#919191;stop-opacity:0;"
+       offset="1"
+       id="stop2394" /></linearGradient><linearGradient
+     inkscape:collect="always"
+     id="linearGradient2378"><stop
+       style="stop-color:#575757;stop-opacity:1;"
+       offset="0"
+       id="stop2380" /><stop
+       style="stop-color:#575757;stop-opacity:0;"
+       offset="1"
+       id="stop2382" /></linearGradient><linearGradient
+     inkscape:collect="always"
+     id="linearGradient2368"><stop
+       style="stop-color:#ffffff;stop-opacity:1;"
+       offset="0"
+       id="stop2370" /><stop
+       style="stop-color:#ffffff;stop-opacity:0;"
+       offset="1"
+       id="stop2372" /></linearGradient><linearGradient
+     inkscape:collect="always"
+     id="linearGradient2349"><stop
+       style="stop-color:#000000;stop-opacity:1;"
+       offset="0"
+       id="stop2351" /><stop
+       style="stop-color:#000000;stop-opacity:0;"
+       offset="1"
+       id="stop2353" /></linearGradient><linearGradient
+     id="linearGradient2341"><stop
+       id="stop2343"
+       offset="0"
+       style="stop-color:#000000;stop-opacity:1;" /><stop
+       id="stop2345"
+       offset="1"
+       style="stop-color:#000000;stop-opacity:0;" /></linearGradient><linearGradient
+     id="linearGradient2329"><stop
+       style="stop-color:#000000;stop-opacity:0.18556701;"
+       offset="0"
+       id="stop2331" /><stop
+       style="stop-color:#ffffff;stop-opacity:1;"
+       offset="1"
+       id="stop2333" /></linearGradient><linearGradient
+     inkscape:collect="always"
+     id="linearGradient2319"><stop
+       style="stop-color:#000000;stop-opacity:1;"
+       offset="0"
+       id="stop2321" /><stop
+       style="stop-color:#000000;stop-opacity:0;"
+       offset="1"
+       id="stop2323" /></linearGradient><linearGradient
+     id="linearGradient2307"><stop
+       style="stop-color:#edd400;stop-opacity:1;"
+       offset="0"
+       id="stop2309" /><stop
+       style="stop-color:#998800;stop-opacity:1;"
+       offset="1"
+       id="stop2311" /></linearGradient><linearGradient
+     inkscape:collect="always"
+     id="linearGradient2299"><stop
+       style="stop-color:#ffffff;stop-opacity:1;"
+       offset="0"
+       id="stop2301" /><stop
+       style="stop-color:#ffffff;stop-opacity:0;"
+       offset="1"
+       id="stop2303" /></linearGradient><linearGradient
+     id="XMLID_2_"
+     gradientUnits="userSpaceOnUse"
+     x1="80.223602"
+     y1="117.5205"
+     x2="48.046001"
+     y2="59.7995"
+     gradientTransform="matrix(0.314683,0.000000,0.000000,0.314683,4.128264,3.742874)">
+				<stop
+   offset="0"
+   style="stop-color:#CCCCCC"
+   id="stop17" />
+				<stop
+   offset="0.9831"
+   style="stop-color:#FFFFFF"
+   id="stop19" />
+				<midPointStop
+   offset="0"
+   style="stop-color:#CCCCCC"
+   id="midPointStop48" />
+				<midPointStop
+   offset="0.5"
+   style="stop-color:#CCCCCC"
+   id="midPointStop50" />
+				<midPointStop
+   offset="0.9831"
+   style="stop-color:#FFFFFF"
+   id="midPointStop52" />
+			</linearGradient><linearGradient
+     inkscape:collect="always"
+     xlink:href="#XMLID_2_"
+     id="linearGradient1514"
+     gradientUnits="userSpaceOnUse"
+     gradientTransform="matrix(0.336922,0.000000,0.000000,0.166888,17.98288,15.46151)"
+     x1="52.006104"
+     y1="166.1331"
+     x2="14.049017"
+     y2="-42.218513" /><linearGradient
+     id="XMLID_39_"
+     gradientUnits="userSpaceOnUse"
+     x1="64.387703"
+     y1="65.124001"
+     x2="64.387703"
+     y2="35.569"
+     gradientTransform="matrix(0.354101,0.000000,0.000000,0.354101,1.638679,-8.364921e-2)">
+						<stop
+   offset="0"
+   style="stop-color:#FFFFFF"
+   id="stop336" />
+						<stop
+   offset="0.8539"
+   style="stop-color:#FF6200"
+   id="stop338" />
+						<stop
+   offset="1"
+   style="stop-color:#F25D00"
+   id="stop340" />
+						<midPointStop
+   offset="0"
+   style="stop-color:#FFFFFF"
+   id="midPointStop335" />
+						<midPointStop
+   offset="0.5"
+   style="stop-color:#FFFFFF"
+   id="midPointStop337" />
+						<midPointStop
+   offset="0.8539"
+   style="stop-color:#FF6200"
+   id="midPointStop339" />
+						<midPointStop
+   offset="0.5"
+   style="stop-color:#FF6200"
+   id="midPointStop341" />
+						<midPointStop
+   offset="1"
+   style="stop-color:#F25D00"
+   id="midPointStop343" />
+					</linearGradient><radialGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient2299"
+     id="radialGradient2305"
+     cx="7.5326638"
+     cy="24.202574"
+     fx="7.5326638"
+     fy="24.202574"
+     r="8.2452128"
+     gradientTransform="matrix(4.100086,-1.627292e-17,2.125447e-14,4.201322,-25.41506,-78.53967)"
+     gradientUnits="userSpaceOnUse" /><radialGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient2307"
+     id="radialGradient2313"
+     cx="19.985598"
+     cy="36.77816"
+     fx="19.985598"
+     fy="36.77816"
+     r="1.0821035"
+     gradientTransform="matrix(1.125263,0.000000,0.000000,0.982744,-3.428678,0.565787)"
+     gradientUnits="userSpaceOnUse" /><radialGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient2319"
+     id="radialGradient2325"
+     cx="20.443665"
+     cy="37.425829"
+     fx="20.443665"
+     fy="37.425829"
+     r="1.0821035"
+     gradientTransform="matrix(1.125263,0.000000,0.000000,0.982744,-3.428678,0.731106)"
+     gradientUnits="userSpaceOnUse" /><linearGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient2329"
+     id="linearGradient2335"
+     x1="17.602522"
+     y1="26.057423"
+     x2="17.682528"
+     y2="32.654099"
+     gradientUnits="userSpaceOnUse"
+     gradientTransform="matrix(0.898789,0,0,1.071914,0.478025,-2.080838)" /><radialGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient2341"
+     id="radialGradient2339"
+     gradientUnits="userSpaceOnUse"
+     gradientTransform="matrix(4.100086,1.627292e-17,2.125447e-14,-4.201322,-5.198109,105.3535)"
+     cx="11.68129"
+     cy="19.554111"
+     fx="11.68129"
+     fy="19.554111"
+     r="8.2452126" /><radialGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient2349"
+     id="radialGradient2355"
+     cx="24.023088"
+     cy="40.56913"
+     fx="24.023088"
+     fy="40.56913"
+     r="16.28684"
+     gradientTransform="matrix(1.000000,0.000000,0.000000,0.431250,1.157278e-15,23.07369)"
+     gradientUnits="userSpaceOnUse" /><radialGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient2368"
+     id="radialGradient2374"
+     cx="29.913452"
+     cy="30.442923"
+     fx="29.913452"
+     fy="30.442923"
+     r="4.0018832"
+     gradientTransform="matrix(3.751495,-2.191984e-22,1.723265e-22,3.147818,-82.00907,-65.70704)"
+     gradientUnits="userSpaceOnUse" /><radialGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient2378"
+     id="radialGradient2384"
+     cx="24.195112"
+     cy="10.577631"
+     fx="24.195112"
+     fy="10.577631"
+     r="15.242914"
+     gradientTransform="matrix(1.125263,-3.585417e-8,4.269819e-8,1.340059,-3.006704,1.355395)"
+     gradientUnits="userSpaceOnUse" /><linearGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient2390"
+     id="linearGradient2396"
+     x1="30.603519"
+     y1="37.337803"
+     x2="30.603519"
+     y2="36.112415"
+     gradientUnits="userSpaceOnUse"
+     gradientTransform="matrix(1.263867,0,0,0.859794,-6.499556,8.390924)" /><linearGradient
+     inkscape:collect="always"
+     xlink:href="#linearGradient2406"
+     id="linearGradient2412"
+     x1="17.850183"
+     y1="28.939463"
+     x2="19.040216"
+     y2="41.03223"
+     gradientUnits="userSpaceOnUse"
+     gradientTransform="matrix(0.888785,0,0,1.08932,2.41099,-1.524336)" /></defs><sodipodi:namedview
+   inkscape:cy="-2.3755359"
+   inkscape:cx="25.234802"
+   inkscape:zoom="1"
+   inkscape:window-height="691"
+   inkscape:window-width="872"
+   inkscape:pageshadow="2"
+   inkscape:pageopacity="0.0"
+   borderopacity="0.21568627"
+   bordercolor="#666666"
+   pagecolor="#ffffff"
+   id="base"
+   inkscape:showpageshadow="false"
+   inkscape:window-x="466"
+   inkscape:window-y="224"
+   inkscape:current-layer="svg2"
+   fill="#555753"
+   showgrid="false"
+   stroke="#a40000"
+   showguides="true"
+   inkscape:guide-bbox="true" />
+	<g
+   style="display:inline"
+   id="g5022"
+   transform="matrix(2.158196e-2,0,0,1.859457e-2,43.12251,41.63767)"><rect
+     y="-150.69685"
+     x="-1559.2523"
+     height="478.35718"
+     width="1339.6335"
+     id="rect4173"
+     style="opacity:0.40206185;color:black;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /><path
+     sodipodi:nodetypes="cccc"
+     id="path5058"
+     d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+     style="opacity:0.40206185;color:black;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /><path
+     style="opacity:0.40206185;color:black;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+     d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+     id="path5018"
+     sodipodi:nodetypes="cccc" /></g><path
+   style="color:#000000;fill:url(#linearGradient1514);fill-opacity:1;fill-rule:nonzero;stroke:#757575;stroke-width:1.0000006;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+   d="M 21.619576,8.1833733 L 27.577035,8.1833733 C 28.416767,8.1833733 41.46351,23.618701 41.46351,24.524032 L 41.019989,43.020777 C 41.019989,43.92611 40.343959,44.654954 39.504227,44.654954 L 8.0469496,44.654954 C 7.2072167,44.654954 6.5311871,43.92611 6.5311871,43.020777 L 6.5876651,24.524032 C 6.5876651,23.618701 20.779844,8.1833733 21.619576,8.1833733 z "
+   id="rect1512"
+   sodipodi:nodetypes="ccccccccc" /><path
+   style="fill:none"
+   id="path5"
+   d="M 46.963575,45.735573 L 1.6386762,45.735573 L 1.6386762,0.41067554 L 46.963575,0.41067554 L 46.963575,45.735573 z " /><path
+   style="fill:url(#linearGradient2335);fill-opacity:1;fill-rule:evenodd"
+   id="path2327"
+   d="M 23,29 L 22.954256,44.090942 L 11.111465,44.090942 L 11,29 L 23,29 z "
+   clip-rule="evenodd"
+   sodipodi:nodetypes="ccccc" /><path
+   sodipodi:nodetypes="ccccccccc"
+   id="path2357"
+   d="M 21.780459,9.405584 L 27.339556,9.405584 C 28.123138,9.405584 40.340425,23.805172 40.340425,24.649756 L 39.993267,42.862067 C 39.993267,43.321326 39.84953,43.515532 39.480892,43.515532 L 8.0936894,43.529812 C 7.7250517,43.529812 7.5097258,43.449894 7.5097258,43.076262 L 7.7250676,24.649756 C 7.7250676,23.805172 20.99688,9.405584 21.780459,9.405584 z "
+   style="opacity:0.3125;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /><path
+   clip-rule="evenodd"
+   d="M 7.2075295,27.943053 L 7.1532728,30.538247 L 25.521437,17.358993 L 40.807832,28.513421 L 40.879142,28.201707 L 24.508686,12.297576 L 7.2075295,27.943053 z "
+   id="path23"
+   style="opacity:0.2;fill:url(#radialGradient2384);fill-opacity:1;fill-rule:evenodd"
+   sodipodi:nodetypes="ccccccc" /><path
+   clip-rule="evenodd"
+   d="M 22,30 L 22,44.090942 L 12.188971,44.090942 L 12,30 L 22,30 z "
+   id="path188"
+   style="fill:url(#linearGradient2412);fill-opacity:1;fill-rule:evenodd"
+   sodipodi:nodetypes="ccccc" /><path
+   style="opacity:0.40909089;fill:url(#radialGradient2325);fill-opacity:1;fill-rule:evenodd"
+   id="path2315"
+   d="M 19.576856,36.44767 C 20.249646,36.44767 20.793472,36.922275 20.793472,37.506177 C 20.793472,38.095988 20.249646,38.574532 19.576856,38.574532 C 18.904584,38.574532 18.35817,38.095988 18.35817,37.506177 C 18.358685,36.922275 18.904584,36.44767 19.576856,36.44767 z "
+   clip-rule="evenodd" /><path
+   clip-rule="evenodd"
+   d="M 19.462314,35.932229 C 20.135103,35.932229 20.678929,36.406834 20.678929,36.990736 C 20.678929,37.580545 20.135103,38.059089 19.462314,38.059089 C 18.790041,38.059089 18.243627,37.580545 18.243627,36.990736 C 18.244142,36.406834 18.790041,35.932229 19.462314,35.932229 z "
+   id="path217"
+   style="fill:url(#radialGradient2313);fill-opacity:1;fill-rule:evenodd" /><path
+   d="M 24.447748,11.559337 L 43.374808,28.729205 L 43.869487,29.121196 L 44.273163,28.949811 L 43.900293,28.188138 L 43.622679,27.964702 L 24.447748,12.392396 L 5.0582327,28.135731 L 4.8206309,28.279851 L 4.603921,28.986637 L 5.0373408,29.115885 L 5.4218948,28.807462 L 24.447748,11.559337 z "
+   id="path342"
+   style="fill:url(#XMLID_39_)"
+   sodipodi:nodetypes="ccccccccccccc" /><path
+   style="fill:#ef2929;stroke:#a40000"
+   id="path362"
+   d="M 24.330168,2.2713382 L 2.4484294,20.372675 L 1.8237005,27.538603 L 3.8236367,29.602926 C 3.8236367,29.602926 24.231018,12.445641 24.44773,12.274963 L 44.08027,29.818223 L 45.978694,27.494226 L 44.362903,20.382852 L 24.44773,2.1668788 L 24.330168,2.2713382 z "
+   sodipodi:nodetypes="cccccccccc" />
+<path
+   style="opacity:0.40909089;color:#000000;fill:url(#radialGradient2305);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+   d="M 2.8413446,20.613129 L 2.5497894,27.236494 L 24.369219,8.980075 L 24.298891,3.0867443 L 2.8413446,20.613129 z "
+   id="path1536"
+   sodipodi:nodetypes="ccccc" /><path
+   sodipodi:nodetypes="ccccc"
+   id="path2337"
+   d="M 24.483763,8.7509884 L 24.583223,2.9098867 L 43.912186,20.56184 L 45.403998,27.062652 L 24.483763,8.7509884 z "
+   style="opacity:0.13636367;color:#000000;fill:url(#radialGradient2339);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" /><path
+   style="opacity:0.31818183;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999934;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+   d="M 27.102228,27.719824 L 36.142223,27.719824 C 36.912818,27.719824 37.53319,28.340194 37.53319,29.110791 L 37.525229,38.190012 C 37.525229,38.960608 36.928907,39.455981 36.158311,39.455981 L 27.102228,39.455981 C 26.331631,39.455981 25.711261,38.835608 25.711261,38.065012 L 25.711261,29.110791 C 25.711261,28.340194 26.331631,27.719824 27.102228,27.719824 z "
+   id="rect2361"
+   sodipodi:nodetypes="ccccccccc" /><rect
+   style="opacity:1;color:#000000;fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:#757575;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+   id="rect3263"
+   width="10.001333"
+   height="9.9624557"
+   x="26.507767"
+   y="28.514256"
+   rx="0.38128215"
+   ry="0.38128215" /><path
+   style="opacity:0.39772728;color:#000000;fill:url(#radialGradient2374);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999958;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+   d="M 27.107118,34.408261 C 30.725101,34.739438 32.634842,32.962557 35.97527,32.855521 L 36,29.00603 L 27.088388,29 L 27.107118,34.408261 z "
+   id="rect2363"
+   sodipodi:nodetypes="ccccc" /></svg>
\ No newline at end of file
diff --git a/sflphone-gtk/pixmaps/users.svg b/sflphone-gtk/pixmaps/users.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5be1babf931e40c790e8636cd53403a6cf715063
--- /dev/null
+++ b/sflphone-gtk/pixmaps/users.svg
@@ -0,0 +1,559 @@
+<?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://web.resource.org/cc/"
+   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="48px"
+   height="48px"
+   id="svg2108"
+   sodipodi:version="0.32"
+   inkscape:version="0.45"
+   sodipodi:docbase="/home/dobey/Projects/gnome-icon-theme/scalable/apps"
+   sodipodi:docname="system-users.svg"
+   inkscape:export-filename="/home/jimmac/src/cvs/gnome/gnome-icon-theme/48x48/stock/generic/stock_person.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs3">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5060">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop5062" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5064" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="0"
+         id="stop5050" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5052" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4562">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop4564" />
+      <stop
+         style="stop-color:#d6d6d2;stop-opacity:1;"
+         offset="1"
+         id="stop4566" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4356">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4358" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4360" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3824">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3826" />
+      <stop
+         style="stop-color:#c9c9c9;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop3828" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3816">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3818" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop3820" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3824"
+       id="linearGradient5462"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.33835,0,0,1.33835,-36.66116,-20.70004)"
+       x1="30.935921"
+       y1="29.553486"
+       x2="30.935921"
+       y2="35.803486" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4356"
+       id="linearGradient5464"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.308485,0.281154,0.281154,1.308485,35.90908,-26.21225)"
+       x1="22.686766"
+       y1="36.390400"
+       x2="21.408455"
+       y2="35.739632" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient5466"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient5468"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient5470"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4562"
+       id="radialGradient5472"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.046177,0,-2.580083e-8,1.017815,-9.084376,-6.268494)"
+       cx="24.753788"
+       cy="26.814409"
+       fx="24.753788"
+       fy="26.814409"
+       r="17.986024" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4356"
+       id="linearGradient5474"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.999008,0.214863,0.214657,0.999968,41.63405,-13.05229)"
+       x1="22.686766"
+       y1="36.390400"
+       x2="21.408455"
+       y2="35.739632" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4356"
+       id="linearGradient5476"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.004822,0.185726,-0.185548,1.005788,-9.182192,-11.89716)"
+       x1="20.661695"
+       y1="35.817974"
+       x2="22.626925"
+       y2="36.217758" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3816"
+       id="radialGradient5478"
+       gradientUnits="userSpaceOnUse"
+       cx="31.112698"
+       cy="19.008621"
+       fx="31.112698"
+       fy="19.008621"
+       r="8.6620579" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4562"
+       id="radialGradient5480"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.558489,0,-1.377346e-8,0.563387,14.87134,4.364123)"
+       cx="29.922075"
+       cy="17.727694"
+       fx="29.922075"
+       fy="17.727694"
+       r="17.986024" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3824"
+       id="linearGradient5482"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.33835,0,0,1.33835,-36.66116,-20.70004)"
+       x1="30.935921"
+       y1="29.553486"
+       x2="30.935921"
+       y2="35.803486" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4356"
+       id="linearGradient5484"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.308485,0.281154,0.281154,1.308485,35.90908,-26.21225)"
+       x1="22.686766"
+       y1="36.390400"
+       x2="21.408455"
+       y2="35.739632" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048"
+       id="linearGradient5486"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient5488"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060"
+       id="radialGradient5490"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4562"
+       id="radialGradient5492"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.046177,0,-2.580083e-8,1.017815,-9.084376,-6.268494)"
+       cx="24.753788"
+       cy="26.814409"
+       fx="24.753788"
+       fy="26.814409"
+       r="17.986024" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4356"
+       id="linearGradient5494"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.999008,0.214863,0.214657,0.999968,41.63405,-13.05229)"
+       x1="22.686766"
+       y1="36.390400"
+       x2="21.408455"
+       y2="35.739632" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4356"
+       id="linearGradient5496"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.004822,0.185726,-0.185548,1.005788,-9.182192,-11.89716)"
+       x1="20.661695"
+       y1="35.817974"
+       x2="22.626925"
+       y2="36.217758" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3816"
+       id="radialGradient5498"
+       gradientUnits="userSpaceOnUse"
+       cx="31.112698"
+       cy="19.008621"
+       fx="31.112698"
+       fy="19.008621"
+       r="8.6620579" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4562"
+       id="radialGradient5500"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.558489,0,-1.377346e-8,0.563387,14.87134,4.364123)"
+       cx="29.922075"
+       cy="17.727694"
+       fx="29.922075"
+       fy="17.727694"
+       r="17.986024" />
+  </defs>
+  <sodipodi:namedview
+     inkscape:showpageshadow="false"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="0.16862745"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="52.946513"
+     inkscape:cy="-8.8981619"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     fill="#9db029"
+     stroke="#727e0a"
+     inkscape:window-width="866"
+     inkscape:window-height="957"
+     inkscape:window-x="2420"
+     inkscape:window-y="156" />
+  <metadata
+     id="metadata4">
+    <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>Person</dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Jakub Steiner</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:source>http://jimmac.musichall.cz</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>user</rdf:li>
+            <rdf:li>person</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Reproduction" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/Distribution" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/Notice" />
+        <cc:permits
+           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/ShareAlike" />
+        <cc:requires
+           rdf:resource="http://web.resource.org/cc/SourceCode" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="cipek"
+     inkscape:groupmode="layer"
+     style="display:inline" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="dalsi cipek"
+     style="display:inline">
+    <g
+       id="g5419"
+       style="opacity:0.78857141"
+       transform="translate(1,3)">
+      <path
+         id="path4173"
+         d="M 10.183488,24.850231 L 15.861626,24.850231 L 12.54938,21.774572 L 11.839612,22.720929 L 11.129844,22.011162 L 10.183488,24.850231 z "
+         style="opacity:1;color:black;fill:url(#linearGradient5482);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <path
+         style="opacity:0.22784807;color:black;fill:url(#linearGradient5484);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 16.700942,32.490544 C 18.348787,31.712992 19.115834,29.810737 19.115834,29.810737 C 17.832196,24.39981 13.794355,20.652646 13.794355,20.652646 C 13.794355,20.652646 17.092843,29.141269 16.700942,32.490544 z "
+         id="path4370"
+         sodipodi:nodetypes="cccc" />
+      <g
+         transform="matrix(1.443435e-2,0,0,1.697277e-2,30.00245,30.05774)"
+         id="g5022"
+         style="display:inline">
+        <rect
+           style="opacity:0.40206185;color:black;fill:url(#linearGradient5486);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           id="rect4173"
+           width="1339.6335"
+           height="478.35718"
+           x="-1559.2523"
+           y="-150.69685" />
+        <path
+           style="opacity:0.40206185;color:black;fill:url(#radialGradient5488);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+           id="path5058"
+           sodipodi:nodetypes="cccc" />
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path5018"
+           d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+           style="opacity:0.40206185;color:black;fill:url(#radialGradient5490);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      </g>
+      <path
+         sodipodi:nodetypes="cczcczc"
+         id="path4308"
+         d="M 11.666184,33.499999 L 22.630126,33.499999 C 25.736577,33.499999 28.812096,32.401458 29.939419,29.270409 C 31.00995,26.297106 30.122153,20.634992 23.178323,16.052935 L 10.204323,16.052935 C 3.2604944,20.282525 2.3927351,26.06687 3.9914241,29.446641 C 5.6201015,32.889807 8.3770015,33.499999 11.666184,33.499999 z "
+         style="opacity:1;color:black;fill:url(#radialGradient5492);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:0.99999928px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <path
+         inkscape:r_cy="true"
+         inkscape:r_cx="true"
+         style="opacity:0.29120878;color:black;fill:url(#linearGradient5494);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 26.968941,31.809458 C 28.227045,31.215239 28.812673,29.761502 28.812673,29.761502 C 27.832636,25.626372 24.749806,22.762722 24.749806,22.762722 C 24.749806,22.762722 27.268151,29.249881 26.968941,31.809458 z "
+         id="path4364"
+         sodipodi:nodetypes="cccc" />
+      <path
+         inkscape:r_cy="true"
+         inkscape:r_cx="true"
+         sodipodi:nodetypes="cccc"
+         id="path4354"
+         d="M 6.7785466,32.51927 C 5.5037298,31.961879 4.9331641,30.618639 4.9331641,30.618639 C 5.7927935,26.456761 8.7342195,23.411829 8.7342195,23.411829 C 8.7342195,23.411829 6.4051874,29.969472 6.7785466,32.51927 z "
+         style="opacity:0.54945056;color:black;fill:url(#linearGradient5496);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <path
+         style="opacity:0.64285715;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:0.99999863px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 11.614344,32.499985 L 22.544063,32.477728 C 25.293538,32.477728 28.01563,31.502849 29.013408,28.724263 C 29.96092,26.085665 28.914748,21.060936 22.768871,16.994681 L 10.764996,16.749865 C 4.6191173,20.503331 3.429572,25.636533 4.8675621,28.880657 C 6.3055541,32.124781 8.4039325,32.477728 11.614344,32.499985 z "
+         id="path4314"
+         sodipodi:nodetypes="cczcczc" />
+      <path
+         transform="matrix(1.021809,0,0,1.022791,-15.11053,-5.36187)"
+         sodipodi:type="arc"
+         style="opacity:1;color:black;fill:url(#radialGradient5498);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="path4318"
+         sodipodi:cx="31.112698"
+         sodipodi:cy="19.008621"
+         sodipodi:rx="8.6620579"
+         sodipodi:ry="8.6620579"
+         d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z" />
+      <path
+         transform="matrix(0.981291,0,0,0.981291,-13.71259,-7.652994)"
+         d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z"
+         sodipodi:ry="8.6620579"
+         sodipodi:rx="8.6620579"
+         sodipodi:cy="19.008621"
+         sodipodi:cx="31.112698"
+         id="path4320"
+         style="opacity:1;color:black;fill:url(#radialGradient5500);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.0190649px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(0.865845,0,0,0.865845,-10.12076,-5.458528)"
+         sodipodi:type="arc"
+         style="opacity:0.52571429;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:1.15494144px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="path4322"
+         sodipodi:cx="31.112698"
+         sodipodi:cy="19.008621"
+         sodipodi:rx="8.6620579"
+         sodipodi:ry="8.6620579"
+         d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z" />
+    </g>
+    <g
+       id="g5434"
+       transform="translate(11.78858,8.906086)">
+      <path
+         style="opacity:1;color:black;fill:url(#linearGradient5462);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 10.183488,24.850231 L 15.861626,24.850231 L 12.54938,21.774572 L 11.839612,22.720929 L 11.129844,22.011162 L 10.183488,24.850231 z "
+         id="path5436" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path5438"
+         d="M 16.700942,32.490544 C 18.348787,31.712992 19.115834,29.810737 19.115834,29.810737 C 17.832196,24.39981 13.794355,20.652646 13.794355,20.652646 C 13.794355,20.652646 17.092843,29.141269 16.700942,32.490544 z "
+         style="opacity:0.22784807;color:black;fill:url(#linearGradient5464);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <g
+         style="display:inline"
+         id="g5440"
+         transform="matrix(1.443435e-2,0,0,1.697277e-2,30.00245,30.05774)">
+        <rect
+           y="-150.69685"
+           x="-1559.2523"
+           height="478.35718"
+           width="1339.6335"
+           id="rect5442"
+           style="opacity:0.40206185;color:black;fill:url(#linearGradient5466);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path5444"
+           d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+           style="opacity:0.40206185;color:black;fill:url(#radialGradient5468);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+        <path
+           style="opacity:0.40206185;color:black;fill:url(#radialGradient5470);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+           id="path5446"
+           sodipodi:nodetypes="cccc" />
+      </g>
+      <path
+         style="opacity:1;color:black;fill:url(#radialGradient5472);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:0.99999928px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 11.666184,33.499999 L 22.630126,33.499999 C 25.736577,33.499999 28.812096,32.401458 29.939419,29.270409 C 31.00995,26.297106 30.122153,20.634992 23.178323,16.052935 L 10.204323,16.052935 C 3.2604944,20.282525 2.3927351,26.06687 3.9914241,29.446641 C 5.6201015,32.889807 8.3770015,33.499999 11.666184,33.499999 z "
+         id="path5448"
+         sodipodi:nodetypes="cczcczc" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path5450"
+         d="M 26.968941,31.809458 C 28.227045,31.215239 28.812673,29.761502 28.812673,29.761502 C 27.832636,25.626372 24.749806,22.762722 24.749806,22.762722 C 24.749806,22.762722 27.268151,29.249881 26.968941,31.809458 z "
+         style="opacity:0.29120878;color:black;fill:url(#linearGradient5474);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         inkscape:r_cx="true"
+         inkscape:r_cy="true" />
+      <path
+         style="opacity:0.54945056;color:black;fill:url(#linearGradient5476);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 6.7785466,32.51927 C 5.5037298,31.961879 4.9331641,30.618639 4.9331641,30.618639 C 5.7927935,26.456761 8.7342195,23.411829 8.7342195,23.411829 C 8.7342195,23.411829 6.4051874,29.969472 6.7785466,32.51927 z "
+         id="path5452"
+         sodipodi:nodetypes="cccc"
+         inkscape:r_cx="true"
+         inkscape:r_cy="true" />
+      <path
+         sodipodi:nodetypes="cczcczc"
+         id="path5454"
+         d="M 11.614344,32.499985 L 22.544063,32.477728 C 25.293538,32.477728 28.01563,31.502849 29.013408,28.724263 C 29.96092,26.085665 28.914748,21.060936 22.768871,16.994681 L 10.764996,16.749865 C 4.6191173,20.503331 3.429572,25.636533 4.8675621,28.880657 C 6.3055541,32.124781 8.4039325,32.477728 11.614344,32.499985 z "
+         style="opacity:0.64285715;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:0.99999863px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <path
+         d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z"
+         sodipodi:ry="8.6620579"
+         sodipodi:rx="8.6620579"
+         sodipodi:cy="19.008621"
+         sodipodi:cx="31.112698"
+         id="path5456"
+         style="opacity:1;color:black;fill:url(#radialGradient5478);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="arc"
+         transform="matrix(1.021809,0,0,1.022791,-15.11053,-5.36187)" />
+      <path
+         sodipodi:type="arc"
+         style="opacity:1;color:black;fill:url(#radialGradient5480);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.0190649px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="path5458"
+         sodipodi:cx="31.112698"
+         sodipodi:cy="19.008621"
+         sodipodi:rx="8.6620579"
+         sodipodi:ry="8.6620579"
+         d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z"
+         transform="matrix(0.981291,0,0,0.981291,-13.71259,-7.652994)" />
+      <path
+         d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1  22.45064,19.008621 A 8.6620579 8.6620579 0 1 1  39.774755 19.008621 z"
+         sodipodi:ry="8.6620579"
+         sodipodi:rx="8.6620579"
+         sodipodi:cy="19.008621"
+         sodipodi:cx="31.112698"
+         id="path5460"
+         style="opacity:0.52571429;color:black;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:1.15494144px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="arc"
+         transform="matrix(0.865845,0,0,0.865845,-10.12076,-5.458528)" />
+    </g>
+  </g>
+</svg>
diff --git a/sflphone-gtk/src/Makefile.am b/sflphone-gtk/src/Makefile.am
index e7b56542ccc70998994f11ba54410e52a615c0ae..0f4ed7d1faa047df6257a0f79af7848732c7008f 100644
--- a/sflphone-gtk/src/Makefile.am
+++ b/sflphone-gtk/src/Makefile.am
@@ -1,5 +1,9 @@
 bin_PROGRAMS = sflphone-gtk
 
+SUBDIRS=contactlist
+  
+# noinst_LTLIBRARIES = libsflphonegtk.la
+
 NOFIFY_LIBS=-lnotify
 SEXY_LIBS=-lsexy
 
@@ -24,7 +28,7 @@ sflphone_gtk_SOURCES = \
   menus.c \
   calltab.c \
   calltree.c \
-  historyfilter.c \
+  searchfilter.c \
   actions.c \
   configwindow.c \
   accountlist.c \
@@ -34,14 +38,18 @@ sflphone_gtk_SOURCES = \
   $(STATUSICON_SOURCE) \
   codeclist.c \
   timestamp.c \
-  reqaccount.c
-  
+  reqaccount.c \
+  addressbook-config.c
+
 noinst_HEADERS =  actions.h dbus.h sflnotify.h mainwindow.h calllist.h dialpad.h audioconf.h codeclist.h assistant.h \
                   callmanager-glue.h errors.h sflphone_const.h configurationmanager-glue.h instance-glue.h menus.h calltab.h calltree.h configwindow.h \
-                  accountlist.h accountwindow.h marshaller.h sliders.h $(STATUSICON_HEADER) timestamp.h historyfilter.c reqaccount.h
+                  accountlist.h accountwindow.h marshaller.h sliders.h $(STATUSICON_HEADER) timestamp.h searchfilter.h reqaccount.h addressbook-config.h
 
 EXTRA_DIST   = marshaller.list  
-sflphone_gtk_LDADD = $(DEPS_LIBS) $(NOTIFY_LIBS) $(SEXY_LIBS)
+
+sflphone_gtk_LDADD = $(DEPS_LIBS) $(NOTIFY_LIBS) $(SEXY_LIBS) \
+			./contactlist/libcontact.la
+
 
 AM_CPPFLAGS = $(DEPS_CFLAGS) \
               -DICONS_DIR=\""$(prefix)/share/sflphone"\" \
diff --git a/sflphone-gtk/src/actions.c b/sflphone-gtk/src/actions.c
index 6d6bbe50b07bdde12073bf4567ab5dd476d2f2f5..0e6d68437b9d2b73bab76555f4e7e6082adfe215 100644
--- a/sflphone-gtk/src/actions.c
+++ b/sflphone-gtk/src/actions.c
@@ -2,17 +2,17 @@
  *  Copyright (C) 2007 - 2008 Savoir-Faire Linux inc.
  *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
  *  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.
@@ -25,7 +25,8 @@
 #include <menus.h>
 #include <statusicon.h>
 #include <calltab.h>
-#include <historyfilter.h>
+#include <searchfilter.h>
+#include <contactlist/eds.h>
 
 #include <gtk/gtk.h>
 #include <string.h>
@@ -36,12 +37,12 @@
 
 guint voice_mails;
 
-void
+    void
 sflphone_notify_voice_mail ( const gchar* accountID , guint count )
 {
     gchar *id;
     gchar *current;
-    
+
     // We want to notify only for the default current account; ie the first in the list
     id = g_strdup( accountID );
     current = account_list_get_current_id();
@@ -56,91 +57,91 @@ sflphone_notify_voice_mail ( const gchar* accountID , guint count )
         if( count > 1)
             g_sprintf(message, _("%d voice mails"), count);
         else
-            g_sprintf(message, _("%d voice mail"), count);	  
+            g_sprintf(message, _("%d voice mail"), count);
         statusbar_push_message(message,  __MSG_VOICE_MAILS);
         g_free(message);
     }
-	
+
     // TODO: add ifdef
     if( account_list_get_size() > 0 )
     {
         account_t* acc = account_list_get_by_id( id );
-	if( acc != NULL )
-            notify_voice_mails( count , acc );	
+        if( acc != NULL )
+            notify_voice_mails( count , acc );
     }
 }
 
-void
+    void
 status_bar_display_account( call_t* c)
 {
     gchar* msg;
     account_t* acc;
     if(c->accountID != NULL){
-      acc = account_list_get_by_id(c->accountID);
-      msg = 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));
-      statusbar_push_message( msg , __MSG_ACCOUNT_DEFAULT);
-      g_free(msg);
-  }
+        acc = account_list_get_by_id(c->accountID);
+        msg = 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));
+        statusbar_push_message( msg , __MSG_ACCOUNT_DEFAULT);
+        g_free(msg);
+    }
 }
-  
 
-gboolean
+
+    gboolean
 sflphone_quit ()
 {
-	gboolean quit = FALSE;
-	guint count = call_list_get_size(current_calls);
-	if(count > 0){
-		quit = main_window_ask_quit();
-	}
-	else{
-		quit = TRUE;
-	}
-
-	if (quit)
-	{
-		dbus_unregister(getpid());
-		dbus_clean ();
-		//call_list_clean(); TODO
-		//account_list_clean()
-		gtk_main_quit ();
-	}
-	return quit;
+    gboolean quit = FALSE;
+    guint count = call_list_get_size(current_calls);
+    if(count > 0){
+        quit = main_window_ask_quit();
+    }
+    else{
+        quit = TRUE;
+    }
+
+    if (quit)
+    {
+        dbus_unregister(getpid());
+        dbus_clean ();
+        //call_list_clean(); TODO
+        //account_list_clean()
+        gtk_main_quit ();
+    }
+    return quit;
 }
 
-void 
+    void
 sflphone_hold(call_t * c )
 {
-	c->state = CALL_STATE_HOLD;
-	update_call_tree(current_calls,c);
-	update_menus();
+    c->state = CALL_STATE_HOLD;
+    update_call_tree(current_calls,c);
+    update_menus();
 }
 
-void 
+    void
 sflphone_ringing(call_t * c )
 {
-	c->state = CALL_STATE_RINGING;
-	update_call_tree(current_calls,c);
-	update_menus();
+    c->state = CALL_STATE_RINGING;
+    update_call_tree(current_calls,c);
+    update_menus();
 }
 
-void
+    void
 sflphone_hung_up( call_t * c)
 {
-  call_list_remove( current_calls, c->callID);
-  update_call_tree_remove(current_calls, c);
-  c->state = CALL_STATE_DIALING;
-  update_menus();
+    call_list_remove( current_calls, c->callID);
+    update_call_tree_remove(current_calls, c);
+    c->state = CALL_STATE_DIALING;
+    update_menus();
 #if GTK_CHECK_VERSION(2,10,0)
-  status_tray_icon_blink( FALSE );
+    status_tray_icon_blink( FALSE );
 #endif
 
-  statusbar_pop_message(__MSG_ACCOUNT_DEFAULT);
+    statusbar_pop_message(__MSG_ACCOUNT_DEFAULT);
 }
 
 /** Internal to actions: Fill account list */
-	void
+    void
 sflphone_fill_account_list(gboolean toolbarInitialized)
 {
 
@@ -148,533 +149,533 @@ sflphone_fill_account_list(gboolean toolbarInitialized)
     gchar** accountID;
     unsigned int i;
 
-	account_list_clear ( );
+    account_list_clear ( );
 
-	array = (gchar **)dbus_account_list();
+    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);
-		    account_list_add(a);
-	    }
-	    g_strfreev (array);
+        for (accountID = array; *accountID; accountID++)
+        {
+            account_t * a = g_new0(account_t,1);
+            a->accountID = g_strdup(*accountID);
+            account_list_add(a);
+        }
+        g_strfreev (array);
     }
 
-	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);
+    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 )
             break;
-		a->properties = details;
-
-		gchar * status = g_hash_table_lookup(details, "Status");
-		if(strcmp(status, "REGISTERED") == 0)
-		{
-			a->state = ACCOUNT_STATE_REGISTERED;
-		}
-		else if(strcmp(status, "UNREGISTERED") == 0)
-		{
-			a->state = ACCOUNT_STATE_UNREGISTERED;
-		}
-		else if(strcmp(status, "TRYING") == 0)
-		{
-			a->state = ACCOUNT_STATE_TRYING;
-		}
-		else if(strcmp(status, "ERROR") == 0)
-		{
-			a->state = ACCOUNT_STATE_ERROR;
-		}
-		else if(strcmp( status , "ERROR_AUTH") == 0 )
-		{
-		  a->state = ACCOUNT_STATE_ERROR_AUTH;
-		}
-		else if(strcmp( status , "ERROR_NETWORK") == 0 )
-		{
-		  a->state = ACCOUNT_STATE_ERROR_NETWORK;
-		}
-		else if(strcmp( status , "ERROR_HOST") == 0 )
-		{
-		  a->state = ACCOUNT_STATE_ERROR_HOST;
-		}
-		else if(strcmp( status , "ERROR_CONF_STUN") == 0 )
-		{
-		  a->state = ACCOUNT_STATE_ERROR_CONF_STUN;
-		}
-		else if(strcmp( status , "ERROR_EXIST_STUN") == 0 )
-		{
-		  a->state = ACCOUNT_STATE_ERROR_EXIST_STUN;
-		}	
-		else
-		{
-			a->state = ACCOUNT_STATE_INVALID;
-		}
-
-	}
-
-	// Prevent update being called when toolbar is not yet initialized
-	if(toolbarInitialized)
-		toolbar_update_buttons();
+        a->properties = details;
+
+        gchar * status = g_hash_table_lookup(details, "Status");
+        if(strcmp(status, "REGISTERED") == 0)
+        {
+            a->state = ACCOUNT_STATE_REGISTERED;
+        }
+        else if(strcmp(status, "UNREGISTERED") == 0)
+        {
+            a->state = ACCOUNT_STATE_UNREGISTERED;
+        }
+        else if(strcmp(status, "TRYING") == 0)
+        {
+            a->state = ACCOUNT_STATE_TRYING;
+        }
+        else if(strcmp(status, "ERROR") == 0)
+        {
+            a->state = ACCOUNT_STATE_ERROR;
+        }
+        else if(strcmp( status , "ERROR_AUTH") == 0 )
+        {
+            a->state = ACCOUNT_STATE_ERROR_AUTH;
+        }
+        else if(strcmp( status , "ERROR_NETWORK") == 0 )
+        {
+            a->state = ACCOUNT_STATE_ERROR_NETWORK;
+        }
+        else if(strcmp( status , "ERROR_HOST") == 0 )
+        {
+            a->state = ACCOUNT_STATE_ERROR_HOST;
+        }
+        else if(strcmp( status , "ERROR_CONF_STUN") == 0 )
+        {
+            a->state = ACCOUNT_STATE_ERROR_CONF_STUN;
+        }
+        else if(strcmp( status , "ERROR_EXIST_STUN") == 0 )
+        {
+            a->state = ACCOUNT_STATE_ERROR_EXIST_STUN;
+        }
+        else
+        {
+            a->state = ACCOUNT_STATE_INVALID;
+        }
+
+    }
+
+    // Prevent update being called when toolbar is not yet initialized
+    if(toolbarInitialized)
+        toolbar_update_buttons();
 }
 
 gboolean sflphone_init()
 {
-	if(!dbus_connect ()){
-	
-		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");
+    if(!dbus_connect ()){
+
+        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");
         current_calls = calltab_init();
-	    history = calltab_init();
-	    if(SHOW_SEARCHBAR)  histfilter = create_filter(GTK_TREE_MODEL(history->store));
-	    account_list_init ();
+        history = calltab_init();
+        contacts = calltab_init();
+        if(SHOW_SEARCHBAR)  histfilter = create_filter(GTK_TREE_MODEL(history->store));
+        init();
+        account_list_init ();
         codec_list_init();
-		sflphone_fill_account_list(FALSE);
-		sflphone_fill_codec_list();
-		sflphone_set_current_account();
-		return TRUE;
-	}
+        sflphone_fill_account_list(FALSE);
+        sflphone_fill_codec_list();
+        sflphone_set_current_account();
+        return TRUE;
+    }
 }
 
-void 
+    void
 sflphone_hang_up()
 {
-	call_t * selectedCall = call_get_selected(current_calls);
-	if(selectedCall)
-	{
-		switch(selectedCall->state)
-		{
-			case CALL_STATE_DIALING:
-				dbus_hang_up (selectedCall);
-				break;
-			case CALL_STATE_RINGING:
-				dbus_hang_up (selectedCall);
-				selectedCall->state = CALL_STATE_DIALING;
-				selectedCall->_stop = 0;
-				break;
-			case CALL_STATE_CURRENT:
-			case CALL_STATE_HOLD:
-			case CALL_STATE_BUSY:
+    call_t * selectedCall = call_get_selected(current_calls);
+    if(selectedCall)
+    {
+        switch(selectedCall->state)
+        {
+            case CALL_STATE_DIALING:
+                dbus_hang_up (selectedCall);
+                break;
+            case CALL_STATE_RINGING:
+                dbus_hang_up (selectedCall);
+                selectedCall->state = CALL_STATE_DIALING;
+                selectedCall->_stop = 0;
+                break;
+            case CALL_STATE_CURRENT:
+            case CALL_STATE_HOLD:
+            case CALL_STATE_BUSY:
             case CALL_STATE_RECORD:
-				dbus_hang_up (selectedCall);
-				selectedCall->state = CALL_STATE_DIALING;
-				(void) time(&selectedCall->_stop);
-				break;
-			case CALL_STATE_FAILURE:
-				dbus_hang_up (selectedCall);
-				selectedCall->state = CALL_STATE_DIALING;
-				selectedCall->_stop = 0;
-				break;
-			case CALL_STATE_INCOMING:  
-				dbus_refuse (selectedCall);
-				selectedCall->state = CALL_STATE_DIALING;
-				selectedCall->_stop = 0;
-				g_print("from sflphone_hang_up : "); stop_notification();
-				break;
-			case CALL_STATE_TRANSFERT:  
-				dbus_hang_up (selectedCall);
-				(void) time(&selectedCall->_stop);
-				break;
-			default:
-				g_warning("Should not happen in sflphone_hang_up()!");
-				break;
-		}
-	}
-	update_call_tree( history , selectedCall );
+                dbus_hang_up (selectedCall);
+                selectedCall->state = CALL_STATE_DIALING;
+                (void) time(&selectedCall->_stop);
+                break;
+            case CALL_STATE_FAILURE:
+                dbus_hang_up (selectedCall);
+                selectedCall->state = CALL_STATE_DIALING;
+                selectedCall->_stop = 0;
+                break;
+            case CALL_STATE_INCOMING:
+                dbus_refuse (selectedCall);
+                selectedCall->state = CALL_STATE_DIALING;
+                selectedCall->_stop = 0;
+                g_print("from sflphone_hang_up : "); stop_notification();
+                break;
+            case CALL_STATE_TRANSFERT:
+                dbus_hang_up (selectedCall);
+                (void) time(&selectedCall->_stop);
+                break;
+            default:
+                g_warning("Should not happen in sflphone_hang_up()!");
+                break;
+        }
+    }
+    update_call_tree( history , selectedCall );
 }
 
 
-void 
+    void
 sflphone_pick_up()
 {
-	call_t * selectedCall = call_get_selected(active_calltree);
-	if(selectedCall)
-	{
-		switch(selectedCall->state)
-		{
-			case CALL_STATE_DIALING:
-				sflphone_place_call (selectedCall);
-				break;
-			case CALL_STATE_INCOMING:
-				selectedCall->history_state = INCOMING;
-				update_call_tree( history , selectedCall );
-				dbus_accept (selectedCall);
-				g_print("from sflphone_pick_up : "); stop_notification();
-				break;
-			case CALL_STATE_HOLD:
-				sflphone_new_call();
-				break;
-			case CALL_STATE_TRANSFERT:
-				dbus_transfert (selectedCall);
-				(void) time(&selectedCall->_stop);
-				break;
-			case CALL_STATE_CURRENT:
-                        case CALL_STATE_RECORD:
-				sflphone_new_call();
-				break;
-			case CALL_STATE_RINGING:
-				sflphone_new_call();
-				break;
-			default:
-				g_warning("Should not happen in sflphone_pick_up()!");
-				break;
-		}
-	}
+    call_t * selectedCall = call_get_selected(active_calltree);
+    if(selectedCall)
+    {
+        switch(selectedCall->state)
+        {
+            case CALL_STATE_DIALING:
+                sflphone_place_call (selectedCall);
+                break;
+            case CALL_STATE_INCOMING:
+                selectedCall->history_state = INCOMING;
+                update_call_tree( history , selectedCall );
+                dbus_accept (selectedCall);
+                g_print("from sflphone_pick_up : "); stop_notification();
+                break;
+            case CALL_STATE_HOLD:
+                sflphone_new_call();
+                break;
+            case CALL_STATE_TRANSFERT:
+                dbus_transfert (selectedCall);
+                (void) time(&selectedCall->_stop);
+                break;
+            case CALL_STATE_CURRENT:
+            case CALL_STATE_RECORD:
+                sflphone_new_call();
+                break;
+            case CALL_STATE_RINGING:
+                sflphone_new_call();
+                break;
+            default:
+                g_warning("Should not happen in sflphone_pick_up()!");
+                break;
+        }
+    }
 }
 
-void 
+    void
 sflphone_on_hold ()
 {
-	call_t * selectedCall = call_get_selected(current_calls);
-	if(selectedCall)
-	{
-		switch(selectedCall->state)
-		{
-			case CALL_STATE_CURRENT:
-				dbus_hold (selectedCall);
-				break;
-                        case CALL_STATE_RECORD:
-                                dbus_hold (selectedCall);
-                                break;
-                                
-			default:
-				g_warning("Should not happen in sflphone_on_hold!");
-				break;
-		}
-	}
+    call_t * selectedCall = call_get_selected(current_calls);
+    if(selectedCall)
+    {
+        switch(selectedCall->state)
+        {
+            case CALL_STATE_CURRENT:
+                dbus_hold (selectedCall);
+                break;
+            case CALL_STATE_RECORD:
+                dbus_hold (selectedCall);
+                break;
+
+            default:
+                g_warning("Should not happen in sflphone_on_hold!");
+                break;
+        }
+    }
 }
 
-void 
+    void
 sflphone_off_hold ()
 {
-	call_t * selectedCall = call_get_selected(current_calls);
-	if(selectedCall)
-	{
-		switch(selectedCall->state)
-		{
-			case CALL_STATE_HOLD:
-				dbus_unhold (selectedCall);
-				break;
-			default:
-				g_warning("Should not happen in sflphone_off_hold ()!");
-				break;
-		}
-	}
+    call_t * selectedCall = call_get_selected(current_calls);
+    if(selectedCall)
+    {
+        switch(selectedCall->state)
+        {
+            case CALL_STATE_HOLD:
+                dbus_unhold (selectedCall);
+                break;
+            default:
+                g_warning("Should not happen in sflphone_off_hold ()!");
+                break;
+        }
+    }
 }
 
 
-void 
+    void
 sflphone_fail( call_t * c )
 {
-	c->state = CALL_STATE_FAILURE;
-	update_call_tree(current_calls,c);
-	update_menus();
+    c->state = CALL_STATE_FAILURE;
+    update_call_tree(current_calls,c);
+    update_menus();
 }
 
-void 
+    void
 sflphone_busy( call_t * c )
 {
-	c->state = CALL_STATE_BUSY;
-	update_call_tree(current_calls, c);
-	update_menus();
+    c->state = CALL_STATE_BUSY;
+    update_call_tree(current_calls, c);
+    update_menus();
 }
 
-void 
+    void
 sflphone_current( call_t * c )
 {
-  if( c->state != CALL_STATE_HOLD )
-	(void) time(&c->_start);
-  c->state = CALL_STATE_CURRENT;
-  update_call_tree(current_calls,c);
-  update_menus();
+    if( c->state != CALL_STATE_HOLD )
+        (void) time(&c->_start);
+    c->state = CALL_STATE_CURRENT;
+    update_call_tree(current_calls,c);
+    update_menus();
 }
 
-void
+    void
 sflphone_record( call_t * c )
 {
-  if( c->state != CALL_STATE_HOLD )
-	(void) time(&c->_start);
-  c->state = CALL_STATE_RECORD;
-  update_call_tree(current_calls,c);
-  update_menus();
+    if( c->state != CALL_STATE_HOLD )
+        (void) time(&c->_start);
+    c->state = CALL_STATE_RECORD;
+    update_call_tree(current_calls,c);
+    update_menus();
 }
 
-void 
+    void
 sflphone_set_transfert()
 {
-	call_t * c = call_get_selected(current_calls);
-	if(c)
-	{
-		c->state = CALL_STATE_TRANSFERT;
-		c->to = g_strdup("");
-		update_call_tree(current_calls,c);
-		update_menus();
-	}
-	toolbar_update_buttons();
+    call_t * c = call_get_selected(current_calls);
+    if(c)
+    {
+        c->state = CALL_STATE_TRANSFERT;
+        c->to = g_strdup("");
+        update_call_tree(current_calls,c);
+        update_menus();
+    }
+    toolbar_update_buttons();
 }
 
-void 
+    void
 sflphone_unset_transfert()
 {
-	call_t * c = call_get_selected(current_calls);
-	if(c)
-	{
-		c->state = CALL_STATE_CURRENT;
-		c->to = g_strdup("");
-		update_call_tree(current_calls,c);
-		update_menus();
-	}
-	toolbar_update_buttons();
+    call_t * c = call_get_selected(current_calls);
+    if(c)
+    {
+        c->state = CALL_STATE_CURRENT;
+        c->to = g_strdup("");
+        update_call_tree(current_calls,c);
+        update_menus();
+    }
+    toolbar_update_buttons();
 }
 
-void
-sflphone_incoming_call (call_t * c) 
+    void
+sflphone_incoming_call (call_t * c)
 {
-	c->history_state = MISSED;
-	call_list_add ( current_calls, c );
-	call_list_add( history, c );
-	update_call_tree_add( current_calls , c );
-	update_menus();
-	if( active_calltree == history )  switch_tab();
+    c->history_state = MISSED;
+    call_list_add ( current_calls, c );
+    call_list_add( history, c );
+    update_call_tree_add( current_calls , c );
+    update_menus();
+    display_calltree (current_calls);
 }
 
-void
+    void
 process_dialing(call_t * c, guint keyval, gchar * key)
 {
-	// We stop the tone
-	if(strlen(c->to) == 0 && c->state != CALL_STATE_TRANSFERT){
-	  dbus_start_tone( FALSE , 0 );
-	  //dbus_play_dtmf( key );
-	}
-
-        g_print("process_dialing : keyval : %i \n",keyval);
-        g_print("process_dialing : key : %s \n",key);
-
-	switch (keyval)
-	{
-		case 65293: /* ENTER */
-		case 65421: /* ENTER numpad */
-			sflphone_place_call(c);
-			break;
-		case 65307: /* ESCAPE */
-			sflphone_hang_up(c);
-			break;
-		case 65288: /* BACKSPACE */
-			{  /* Brackets mandatory because of local vars */
-				gchar * before = c->to;
-				if(strlen(c->to) >= 1){
-                                        
-					c->to = g_strndup(c->to, strlen(c->to) -1);
-					g_free(before);
-					g_print("TO: backspace %s\n", c->to);
-
-					if(c->state == CALL_STATE_DIALING)
-					{
-						g_free(c->from);
-						c->from = g_strconcat("\"\" <", c->to, ">", NULL);
-					}
-					update_call_tree(current_calls,c);
-				} 
-				else if(strlen(c->to) == 0)
-				{
-				  if(c->state != CALL_STATE_TRANSFERT)
-					dbus_hang_up(c);
-				}
-			}
-			break;
-		case 65289: /* TAB */
-		case 65513: /* ALT */
-		case 65507: /* CTRL */
-		case 65515: /* SUPER */
-		case 65509: /* CAPS */
-			break;
-		default:
-                  // if (keyval < 255 || (keyval >65453 && keyval < 65466))
-                        if (keyval < 127)
-			{ 
-                               
-                                if(c->state != CALL_STATE_TRANSFERT)
-				  dbus_play_dtmf( key );
-				  gchar * before = c->to;
-				  c->to = g_strconcat(c->to, key, NULL);
-				  g_free(before);
-				  g_print("TO:default %s\n", c->to);
-
-				if(c->state == CALL_STATE_DIALING)
-				{
-					g_free(c->from);
-					c->from = g_strconcat("\"\" <", c->to, ">", NULL);
-				}
-				update_call_tree(current_calls,c);
-			}
-			break;
-	}
+    // We stop the tone
+    if(strlen(c->to) == 0 && c->state != CALL_STATE_TRANSFERT){
+        dbus_start_tone( FALSE , 0 );
+        //dbus_play_dtmf( key );
+    }
 
+    g_print("process_dialing : keyval : %i \n",keyval);
+    g_print("process_dialing : key : %s \n",key);
+
+    switch (keyval)
+    {
+        case 65293: /* ENTER */
+        case 65421: /* ENTER numpad */
+            sflphone_place_call(c);
+            break;
+        case 65307: /* ESCAPE */
+            sflphone_hang_up(c);
+            break;
+        case 65288: /* BACKSPACE */
+            {  /* Brackets mandatory because of local vars */
+                gchar * before = c->to;
+                if(strlen(c->to) >= 1){
+
+                    c->to = g_strndup(c->to, strlen(c->to) -1);
+                    g_free(before);
+                    g_print("TO: backspace %s\n", c->to);
+
+                    if(c->state == CALL_STATE_DIALING)
+                    {
+                        g_free(c->from);
+                        c->from = g_strconcat("\"\" <", c->to, ">", NULL);
+                    }
+                    update_call_tree(current_calls,c);
+                } 
+                else if(strlen(c->to) == 0)
+                {
+                    if(c->state != CALL_STATE_TRANSFERT)
+                        dbus_hang_up(c);
+                }
+            }
+            break;
+        case 65289: /* TAB */
+        case 65513: /* ALT */
+        case 65507: /* CTRL */
+        case 65515: /* SUPER */
+        case 65509: /* CAPS */
+            break;
+        default:
+            // if (keyval < 255 || (keyval >65453 && keyval < 65466))
+            if (keyval < 127 || (keyval > 65400 && keyval < 65466))
+            { 
+
+                if(c->state != CALL_STATE_TRANSFERT)
+                    dbus_play_dtmf( key );
+                gchar * before = c->to;
+                c->to = g_strconcat(c->to, key, NULL);
+                g_free(before);
+                g_print("TO:default %s\n", c->to);
+
+                if(c->state == CALL_STATE_DIALING)
+                {
+                    g_free(c->from);
+                    c->from = g_strconcat("\"\" <", c->to, ">", NULL);
+                }
+                update_call_tree(current_calls,c);
+            }
+            break;
+    }
 }
 
 
-call_t * 
+    call_t *
 sflphone_new_call()
 {
 
-        sflphone_on_hold();
+    sflphone_on_hold();
 
-	// Play a tone when creating a new call
-	if( call_list_get_size(current_calls) == 0 )
-	  dbus_start_tone( TRUE , ( voice_mails > 0 )? TONE_WITH_MESSAGE : TONE_WITHOUT_MESSAGE) ;
+    // Play a tone when creating a new call
+    if( call_list_get_size(current_calls) == 0 )
+        dbus_start_tone( TRUE , ( voice_mails > 0 )? TONE_WITH_MESSAGE : TONE_WITHOUT_MESSAGE) ;
 
-	call_t * c = g_new0 (call_t, 1);
-	c->state = CALL_STATE_DIALING;
-	c->from = g_strconcat("\"\" <>", NULL);
+    call_t * c = g_new0 (call_t, 1);
+    c->state = CALL_STATE_DIALING;
+    c->from = g_strconcat("\"\" <>", NULL);
 
-	c->callID = g_new0(gchar, 30);
-	g_sprintf(c->callID, "%d", rand()); 
+    c->callID = g_new0(gchar, 30);
+    g_sprintf(c->callID, "%d", rand());
 
-	c->to = g_strdup("");
+    c->to = g_strdup("");
 
-	c->_start = 0;
-	c->_stop = 0;
+    c->_start = 0;
+    c->_stop = 0;
 
-	call_list_add(current_calls,c);
-	update_call_tree_add(current_calls,c);  
-	update_menus();
+    call_list_add(current_calls,c);
+    update_call_tree_add(current_calls,c);
+    update_menus();
 
-	return c;
+    return c;
 }
 
 
-void 
+    void
 sflphone_keypad( guint keyval, gchar * key)
 {
-  
-	call_t * c = call_get_selected(current_calls);
-	if(c)
-	{
-		switch(c->state) 
-		{
-			case CALL_STATE_DIALING: // Currently dialing => edit number
-				process_dialing(c, keyval, key);
-				break;
-                case CALL_STATE_RECORD:
-			case CALL_STATE_CURRENT:
-				switch (keyval)
-				{
-					case 65307: /* ESCAPE */
-						dbus_hang_up(c);
-						(void) time(&c->_stop);
-						update_call_tree( history , c );
-						break;
-					default:  
-						// To play the dtmf when calling mail box for instance
-						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);
-							//g_free(before);
-							//g_free(temp);
-							//update_call_tree(current_calls,c);
-						}
-						break;
-				}
-				break;
-			case CALL_STATE_INCOMING:
-				switch (keyval)
-				{
-					case 65293: /* ENTER */
-					case 65421: /* ENTER numpad */
-						c->history_state = INCOMING;
-						update_call_tree( history , c );
-						dbus_accept(c);
-						g_print("from sflphone_keypad ( enter ) : "); stop_notification();
-						break;
-					case 65307: /* ESCAPE */
-						dbus_refuse(c);
-						g_print("from sflphone_keypad ( escape ) : "); stop_notification();
-						break;
-				}
-				break;
-			case CALL_STATE_TRANSFERT:
-				switch (keyval)
-				{
-					case 65293: /* ENTER */
-					case 65421: /* ENTER numpad */
-						dbus_transfert(c);
-						(void) time(&c->_stop);
-						break;
-					case 65307: /* ESCAPE */
-						sflphone_unset_transfert(c); 
-						break;
-					default: // When a call is on transfert, typing new numbers will add it to c->to
-						process_dialing(c, keyval, key);
-						break;
-				}
-				break;
-			case CALL_STATE_HOLD:
-				switch (keyval)
-				{
-					case 65293: /* ENTER */
-					case 65421: /* ENTER numpad */
-						dbus_unhold(c);
-						break;
-					case 65307: /* ESCAPE */
-						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);
-						break;
-				}
-				break;
-			case CALL_STATE_RINGING:
-			case CALL_STATE_BUSY:
-			case CALL_STATE_FAILURE:
-				c->_stop = 0;
-				switch (keyval)
-				{
-					case 65307: /* ESCAPE */
-					  dbus_hang_up(c);
-					  c->_stop = 0;
-					  update_call_tree( history , c );
-					  break;
-				}
-				break;
-			default:
-				break;
-		} 
-	}
-	else 
-	{ // Not in a call, not dialing, create a new call 
-		//dbus_play_dtmf(key);
-		switch (keyval)
-		{
-			case 65293: /* ENTER */
-			case 65421: /* ENTER numpad */
-			case 65307: /* ESCAPE */
-				break;
-			default:
-				if( active_calltree == history )
-				  switch_tab();
-				process_dialing(sflphone_new_call(), keyval, key);
-				break;
-		}
-
-
-	}
- } 
+    call_t * c = call_get_selected(current_calls);
+
+    if((active_calltree != current_calls) || (active_calltree == current_calls && !c))
+    {
+        // Not in a call, not dialing, create a new call
+        //dbus_play_dtmf(key);
+        switch (keyval)
+        {
+            case 65293: /* ENTER */
+            case 65421: /* ENTER numpad */
+            case 65307: /* ESCAPE */
+                break;
+            default:
+                display_calltree (current_calls);
+                process_dialing(sflphone_new_call(), keyval, key);
+                break;
+        }
+    }
+    else if(c)
+    {
+        printf("call\n");
+        switch(c->state)
+        {
+            case CALL_STATE_DIALING: // Currently dialing => edit number
+                process_dialing(c, keyval, key);
+                break;
+            case CALL_STATE_RECORD:
+            case CALL_STATE_CURRENT:
+                switch (keyval)
+                {
+                    case 65307: /* ESCAPE */
+                        dbus_hang_up(c);
+                        (void) time(&c->_stop);
+                        update_call_tree( history , c );
+                        break;
+                    default:
+                        // To play the dtmf when calling mail box for instance
+                        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);
+                            //g_free(before);
+                            //g_free(temp);
+                            //update_call_tree(current_calls,c);
+                        }
+                        break;
+                }
+                break;
+            case CALL_STATE_INCOMING:
+                switch (keyval)
+                {
+                    case 65293: /* ENTER */
+                    case 65421: /* ENTER numpad */
+                        c->history_state = INCOMING;
+                        update_call_tree( history , c );
+                        dbus_accept(c);
+                        g_print("from sflphone_keypad ( enter ) : "); stop_notification();
+                        break;
+                    case 65307: /* ESCAPE */
+                        dbus_refuse(c);
+                        g_print("from sflphone_keypad ( escape ) : "); stop_notification();
+                        break;
+                }
+                break;
+            case CALL_STATE_TRANSFERT:
+                switch (keyval)
+                {
+                    case 65293: /* ENTER */
+                    case 65421: /* ENTER numpad */
+                        dbus_transfert(c);
+                        (void) time(&c->_stop);
+                        break;
+                    case 65307: /* ESCAPE */
+                        sflphone_unset_transfert(c);
+                        break;
+                    default: // When a call is on transfert, typing new numbers will add it to c->to
+                        process_dialing(c, keyval, key);
+                        break;
+                }
+                break;
+            case CALL_STATE_HOLD:
+                switch (keyval)
+                {
+                    case 65293: /* ENTER */
+                    case 65421: /* ENTER numpad */
+                        dbus_unhold(c);
+                        break;
+                    case 65307: /* ESCAPE */
+                        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);
+                        break;
+                }
+                break;
+            case CALL_STATE_RINGING:
+            case CALL_STATE_BUSY:
+            case CALL_STATE_FAILURE:
+                c->_stop = 0;
+                switch (keyval)
+                {
+                    case 65307: /* ESCAPE */
+                        dbus_hang_up(c);
+                        c->_stop = 0;
+                        update_call_tree( history , c );
+                        break;
+                }
+                break;
+            default:
+                break;
+        }
+    }
+}
 
 /*
  * Place a call with the current account.
- * If there is no default account selected, place a call with the first 
+ * If there is no default account selected, place a call with the first
  * registered account of the account list
  * Else, popup an error message
  */
-void 
+    void
 sflphone_place_call ( call_t * c )
 {
 
@@ -685,13 +686,13 @@ sflphone_place_call ( call_t * c )
             notify_no_accounts();
             sflphone_fail(c);
         }
-        
+
         else if( account_list_get_by_state( ACCOUNT_STATE_REGISTERED ) == NULL )
         {
             notify_no_registered_accounts();
             sflphone_fail(c);
         }
-    
+
         else
         {
             account_t * current;
@@ -707,155 +708,155 @@ sflphone_place_call ( call_t * c )
 
             if( current )
             {
-	            if(g_strcasecmp(g_hash_table_lookup( current->properties, "Status"),"REGISTERED")==0)
-	            { 
-	                // OK, everything alright - the call is made with the current account
-	                c -> accountID = current -> accountID;
-	                status_bar_display_account(c);
-	                dbus_place_call(c);
-	            }
-	            else
-	            {
-	                // Current account is not registered 
-	                // So we place a call with the first registered account
-	                // And we switch the current account
-	                current = account_list_get_by_state( ACCOUNT_STATE_REGISTERED );
-	                c -> accountID = current -> accountID;
-	                dbus_place_call(c);
-	                notify_current_account( current );
-	                status_bar_display_account(c);
-	                account_list_set_current_id( c-> accountID );
-	            }
+                if(g_strcasecmp(g_hash_table_lookup( current->properties, "Status"),"REGISTERED")==0)
+                {
+                    // OK, everything alright - the call is made with the current account
+                    c -> accountID = current -> accountID;
+                    status_bar_display_account(c);
+                    dbus_place_call(c);
+                }
+                else
+                {
+                    // Current account is not registered
+                    // So we place a call with the first registered account
+                    // And we switch the current account
+                    current = account_list_get_by_state( ACCOUNT_STATE_REGISTERED );
+                    c -> accountID = current -> accountID;
+                    dbus_place_call(c);
+                    notify_current_account( current );
+                    status_bar_display_account(c);
+                    account_list_set_current_id( c-> accountID );
+                }
             }
             else
             {
-	            // No current accounts have been setup. 
-	            // So we place a call with the first registered account
-	            // and we change the current account
-	            current = account_list_get_by_state( ACCOUNT_STATE_REGISTERED );
-	            c -> accountID = current -> accountID;
-	            dbus_place_call(c);
-	            notify_current_account( current );
-	            status_bar_display_account(c);
-	            account_list_set_current_id( c-> accountID );
+                // No current accounts have been setup.
+                // So we place a call with the first registered account
+                // and we change the current account
+                current = account_list_get_by_state( ACCOUNT_STATE_REGISTERED );
+                c -> accountID = current -> accountID;
+                dbus_place_call(c);
+                notify_current_account( current );
+                status_bar_display_account(c);
+                account_list_set_current_id( c-> accountID );
             }
         }
-	    // Update history
-	    c->history_state = OUTGOING;
-	    call_list_add(history, c);
+        // Update history
+        c->history_state = OUTGOING;
+        call_list_add(history, c);
     }
 }
 
 
-void 
+    void
 sflphone_display_selected_codec (const gchar* codecName)
 {
     call_t * selectedCall = call_get_selected(current_calls);
     gchar* msg;
     account_t* acc;
     if(selectedCall->accountID != NULL){
-      acc = account_list_get_by_id(selectedCall->accountID);
-      msg = g_markup_printf_escaped(_("%s account- %s             %s") , 
-		 (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_TYPE), 
-                 (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_ALIAS),
-                 codecName);
-      statusbar_push_message( msg , __MSG_ACCOUNT_DEFAULT);
-      g_free(msg);
-  }
+        acc = account_list_get_by_id(selectedCall->accountID);
+        msg = g_markup_printf_escaped(_("%s account- %s             %s") ,
+                (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_TYPE),
+                (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_ALIAS),
+                codecName);
+        statusbar_push_message( msg , __MSG_ACCOUNT_DEFAULT);
+        g_free(msg);
+    }
 
 }
 
-gchar*
+    gchar*
 sflphone_get_current_codec_name()
 {
     call_t * selectedCall = call_get_selected(current_calls);
     return dbus_get_current_codec_name(selectedCall);
 }
 
-void
+    void
 sflphone_rec_call()
 {
-  call_t * selectedCall = call_get_selected(current_calls);
-  dbus_set_record(selectedCall);
-  
+    call_t * selectedCall = call_get_selected(current_calls);
+    dbus_set_record(selectedCall);
 
-  switch(selectedCall->state)
-  {
-      case CALL_STATE_CURRENT:
+
+    switch(selectedCall->state)
+    {
+        case CALL_STATE_CURRENT:
             selectedCall->state = CALL_STATE_RECORD;
-            break; 
-      case CALL_STATE_RECORD:
+            break;
+        case CALL_STATE_RECORD:
             selectedCall->state = CALL_STATE_CURRENT;
             break;
-      default: 
+        default:
             g_warning("Should not happen in sflphone_off_hold ()!");
-        break;
-  }
-  update_call_tree(current_calls,selectedCall);
-  update_menus();
+            break;
+    }
+    update_call_tree(current_calls,selectedCall);
+    update_menus();
 
-  // gchar* codname = sflphone_get_current_codec_name();
-  // printf("sflphone_get_current_codec_name: %s \n",codname);
+    // gchar* codname = sflphone_get_current_codec_name();
+    // printf("sflphone_get_current_codec_name: %s \n",codname);
 }
 
 /* Internal to action - set the __CURRENT_ACCOUNT variable */
-void
+    void
 sflphone_set_current_account()
 {
-  if( account_list_get_size() > 0 )
-    account_list_set_current_pos( 0 );	
+    if( account_list_get_size() > 0 )
+        account_list_set_current_pos( 0 );
 }
 
 
 /* Internal to action - get the codec list */
-void	
+    void
 sflphone_fill_codec_list()
 {
 
-  codec_list_clear();
-    
-  gchar** codecs = (gchar**)dbus_codec_list();
-  gchar** order = (gchar**)dbus_get_active_codec_list();
-  gchar** details;
-  gchar** pl;
-
-  for(pl=order; *order; order++)
-  {
-    codec_t * c = g_new0(codec_t, 1);
-    c->_payload = atoi(*order);
-    details = (gchar **)dbus_codec_details(c->_payload);
-    //printf("Codec details: %s / %s / %s / %s\n",details[0],details[1],details[2],details[3]);
-    c->name = details[0];
-    c->is_active = TRUE;
-    c->sample_rate = atoi(details[1]);
-    c->_bitrate = atof(details[2]);
-    c->_bandwidth = atof(details[3]);
-    codec_list_add(c);
-  }
-
-  for(pl=codecs; *codecs; codecs++)
-  {
-    details = (gchar **)dbus_codec_details(atoi(*codecs));
-    if(codec_list_get(details[0])!=NULL){
-      // does nothing - the codec is already in the list, so is active.
+    codec_list_clear();
+
+    gchar** codecs = (gchar**)dbus_codec_list();
+    gchar** order = (gchar**)dbus_get_active_codec_list();
+    gchar** details;
+    gchar** pl;
+
+    for(pl=order; *order; order++)
+    {
+        codec_t * c = g_new0(codec_t, 1);
+        c->_payload = atoi(*order);
+        details = (gchar **)dbus_codec_details(c->_payload);
+        //printf("Codec details: %s / %s / %s / %s\n",details[0],details[1],details[2],details[3]);
+        c->name = details[0];
+        c->is_active = TRUE;
+        c->sample_rate = atoi(details[1]);
+        c->_bitrate = atof(details[2]);
+        c->_bandwidth = atof(details[3]);
+        codec_list_add(c);
     }
-    else{
-      codec_t* c = g_new0(codec_t, 1);
-      c->_payload = atoi(*codecs);
-      c->name = details[0];
-      c->is_active = FALSE;
-      c->sample_rate = atoi(details[1]);
-      c->_bitrate = atof(details[2]);
-      c->_bandwidth = atof(details[3]);
-      codec_list_add(c);
+
+    for(pl=codecs; *codecs; codecs++)
+    {
+        details = (gchar **)dbus_codec_details(atoi(*codecs));
+        if(codec_list_get(details[0])!=NULL){
+            // does nothing - the codec is already in the list, so is active.
+        }
+        else{
+            codec_t* c = g_new0(codec_t, 1);
+            c->_payload = atoi(*codecs);
+            c->name = details[0];
+            c->is_active = FALSE;
+            c->sample_rate = atoi(details[1]);
+            c->_bitrate = atof(details[2]);
+            c->_bandwidth = atof(details[3]);
+            codec_list_add(c);
+        }
+    }
+    if( codec_list_get_size() == 0) {
+
+        gchar* markup = g_markup_printf_escaped(_("<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> )") , CODECS_DIR , g_get_home_dir());
+        main_window_error_message( markup );
+        dbus_unregister(getpid());
+        exit(0);
     }
-  }
-  if( codec_list_get_size() == 0) {
-    
-    gchar* markup = g_markup_printf_escaped(_("<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> )") , CODECS_DIR , g_get_home_dir());
-    main_window_error_message( markup );
-    dbus_unregister(getpid());
-    exit(0);
-  }
 }
 
diff --git a/sflphone-gtk/src/addressbook-config.c b/sflphone-gtk/src/addressbook-config.c
new file mode 100644
index 0000000000000000000000000000000000000000..3edc93265b2fbf92995fb777f2c352995bd0a016
--- /dev/null
+++ b/sflphone-gtk/src/addressbook-config.c
@@ -0,0 +1,174 @@
+/*
+ *  Copyright (C) 2009 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.
+ */
+
+#include "addressbook-config.h"
+
+AddressBook_Config *addressbook_config;
+
+void addressbook_load_parameters (AddressBook_Config **settings) {
+
+    GHashTable *_params = NULL;
+    AddressBook_Config *_settings;
+
+    // Allocate a struct
+    _settings = g_new0 (AddressBook_Config, 1);
+    
+    // Fetch the settings from D-Bus
+    _params = (GHashTable*) dbus_get_addressbook_settings ();
+
+    if (_params == NULL) {
+        _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->max_results =  (guint)(g_hash_table_lookup (_params, ADDRESSBOOK_MAX_RESULTS));
+        _settings->display_contact_photo = (guint) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO));
+        _settings->search_phone_business = (guint) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS));
+        _settings->search_phone_home = (guint) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_PHONE_HOME));
+        _settings->search_phone_mobile = (guint) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_PHONE_MOBILE));
+    }
+    
+    *settings = _settings;
+}
+
+void addressbook_save_parameters (void) {
+
+    GHashTable *params = NULL;
+    
+    params = g_hash_table_new (NULL, g_str_equal);
+    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);
+
+    // Decrement the reference count
+    g_hash_table_unref (params);
+}
+
+static void max_results_cb (GtkRange* scale) {
+
+    addressbook_config->max_results = (guint) gtk_range_get_value (GTK_RANGE (scale));
+}
+
+static void display_contact_photo_cb (GtkWidget *widget) {
+
+    addressbook_config->display_contact_photo = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget));
+}
+
+static void search_phone_business_cb (GtkWidget *widget) {
+
+    addressbook_config->search_phone_business = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget));
+}
+
+static void search_phone_home_cb (GtkWidget *widget) {
+
+    addressbook_config->search_phone_home = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget));
+}
+
+static void search_phone_mobile_cb (GtkWidget *widget) {
+
+    addressbook_config->search_phone_mobile = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget));
+}
+
+GtkWidget* create_addressbook_settings () {
+    
+    GtkWidget *ret, *result_frame, *box, *value, *label, *photo, *item;
+
+    // Load the user value
+    addressbook_load_parameters (&addressbook_config);
+
+    ret = gtk_vbox_new(FALSE, 10);
+    gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+
+    result_frame = gtk_frame_new(_("Search Parameters"));
+    gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0);
+    gtk_widget_show (result_frame);
+
+    box = gtk_vbox_new( FALSE , 1);
+    gtk_widget_show (box);
+    gtk_container_add (GTK_CONTAINER(result_frame) , box);
+
+    // SCALE BUTTON - NUMBER OF RESULTS
+    label = gtk_label_new (_("Maximum result number for a request: "));
+    gtk_box_pack_start (GTK_BOX(box) , label , FALSE , FALSE , 1);
+    value = gtk_hscale_new_with_range (25.0 , 50.0 , 5.0);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), value);
+    gtk_scale_set_digits (GTK_SCALE(value) , 0);
+    gtk_scale_set_value_pos (GTK_SCALE(value) , GTK_POS_RIGHT); 
+    gtk_range_set_value (GTK_RANGE( value ) , addressbook_config->max_results);
+    gtk_box_pack_start (GTK_BOX(box) , value , TRUE , TRUE , 0);
+    g_signal_connect (G_OBJECT (value) , "value-changed" , G_CALLBACK(max_results_cb), NULL );
+
+    // 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_box_pack_start (GTK_BOX(box) , photo , TRUE , TRUE , 1);
+     
+    label = gtk_label_new (_("Search for and display: "));
+    gtk_box_pack_start (GTK_BOX(box) , label , FALSE , FALSE , 1);
+    
+    item = gtk_check_button_new_with_mnemonic( _("_Business phone"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_business);
+    g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_business_cb) , NULL);
+    gtk_box_pack_start (GTK_BOX(box) , item , TRUE , TRUE , 1);
+     
+    item = gtk_check_button_new_with_mnemonic( _("_Home phone"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_home);
+    g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_home_cb) , NULL);
+    gtk_box_pack_start (GTK_BOX(box) , item , TRUE , TRUE , 1);
+     
+    item = gtk_check_button_new_with_mnemonic( _("_Mobile phone"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_mobile);
+    g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_mobile_cb) , NULL);
+    gtk_box_pack_start (GTK_BOX(box) , item , TRUE , TRUE , 1);
+     
+    gtk_widget_show_all(ret);
+
+    return ret;
+
+}
+
+gboolean addressbook_display (AddressBook_Config *settings, const gchar *field) {
+
+    gboolean display = FALSE;
+
+    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)
+        display = (settings->search_phone_business == 1)? TRUE : FALSE;
+
+    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)
+        display = (settings->search_phone_mobile == 1)? TRUE : FALSE;
+
+    else
+        display = FALSE;
+
+    return display;
+}
diff --git a/sflphone-gtk/src/addressbook-config.h b/sflphone-gtk/src/addressbook-config.h
new file mode 100644
index 0000000000000000000000000000000000000000..f880d726bb33500eca10b4f3b302eb26195fe001
--- /dev/null
+++ b/sflphone-gtk/src/addressbook-config.h
@@ -0,0 +1,62 @@
+/*
+ *  Copyright (C) 2009 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.
+ */
+
+#ifndef _ADDRESS_BOOK_CONFIG
+#define _ADDRESS_BOOK_CONFIG
+
+#include <gtk/gtk.h>
+#include <glib/gtypes.h>
+
+#include "actions.h"
+
+G_BEGIN_DECLS
+
+#define ADDRESSBOOK_MAX_RESULTS             "ADDRESSBOOK_MAX_RESULTS"
+#define ADDRESSBOOK_DISPLAY_CONTACT_PHOTO   "ADDRESSBOOK_DISPLAY_CONTACT_PHOTO"
+#define ADDRESSBOOK_DISPLAY_PHONE_BUSINESS   "ADDRESSBOOK_DISPLAY_PHONE_BUSINESS"
+#define ADDRESSBOOK_DISPLAY_PHONE_HOME       "ADDRESSBOOK_DISPLAY_PHONE_HOME"
+#define ADDRESSBOOK_DISPLAY_PHONE_MOBILE     "ADDRESSBOOK_DISPLAY_PHONE_MOBILE"
+
+typedef struct _AddressBook_Config {
+    guint max_results;
+    guint display_contact_photo;
+    guint search_phone_home;
+    guint search_phone_business;
+    guint search_phone_mobile;
+} AddressBook_Config;
+
+/**
+ * Save the parameters through D-BUS
+ */
+void addressbook_save_parameters (void);
+
+/**
+ * Initialize the address book structure, and retrieve the saved parameters through D-Bus
+ *
+ * @param settings  The addressbook structure 
+ */
+void addressbook_load_parameters (AddressBook_Config **settings);
+
+gboolean addressbook_display (AddressBook_Config *settings, const gchar *field);
+
+GtkWidget* create_addressbook_settings ();
+
+G_END_DECLS
+
+#endif // _ADDRESS_BOOK_CONFIG
diff --git a/sflphone-gtk/src/calllist.c b/sflphone-gtk/src/calllist.c
index c9629ad463cb8b8cd91d72294d39237e78d768c3..8bc082c668236e153a69a21b8709fc7145429f21 100644
--- a/sflphone-gtk/src/calllist.c
+++ b/sflphone-gtk/src/calllist.c
@@ -1,27 +1,27 @@
 /*
  *  Copyright (C) 2007 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.
  */
- 
+
 #include <calllist.h>
 #include <calltree.h>
 #include <dbus.h>
 
-#include <string.h>
+#include <glib/gprintf.h>
 
 /*
  * GQueue * callQueue = NULL;
@@ -29,11 +29,11 @@
  */
 
 /* GCompareFunc to compare a callID (gchar* and a call_t) */
-gint 
+gint
 is_callID_callstruct ( gconstpointer a, gconstpointer b)
 {
   call_t * c = (call_t*)a;
-  if(strcmp(c->callID, (const gchar*) b) == 0)
+  if(g_strcasecmp(c->callID, (const gchar*) b) == 0)
   {
     return 0;
   }
@@ -44,7 +44,7 @@ is_callID_callstruct ( gconstpointer a, gconstpointer b)
 }
 
 /* GCompareFunc to get current call (gchar* and a call_t) */
-gint 
+gint
 get_state_callstruct ( gconstpointer a, gconstpointer b)
 {
   call_t * c = (call_t*)a;
@@ -58,30 +58,30 @@ get_state_callstruct ( gconstpointer a, gconstpointer b)
   }
 }
 
-void 
+void
 call_list_init (calltab_t* tab)
 {
   tab->callQueue = g_queue_new ();
   tab->selectedCall = NULL;
 }
 
-void 
+void
 call_list_clean (calltab_t* tab)
 {
   g_queue_free (tab->callQueue);
 }
 
-void 
+void
 call_list_reset (calltab_t* tab)
 {
   g_queue_free (tab->callQueue);
   tab->callQueue = g_queue_new();
 }
 
-void 
+void
 call_list_add (calltab_t* tab, call_t * c)
 {
-  if( tab == history )	
+  if( tab == history )
   {
     // First case: can still add calls to the list
     if( call_list_get_size(tab) < dbus_get_max_calls() )
@@ -92,7 +92,7 @@ call_list_add (calltab_t* tab, call_t * c)
     // List full -> Remove the last call from history and preprend the new call to the list
     else
     {
-      update_call_tree_remove( history , (call_t*)g_queue_pop_head( tab -> callQueue ) );      
+      update_call_tree_remove( history , (call_t*)g_queue_pop_head( tab -> callQueue ) );
       g_queue_push_tail (tab->callQueue, (gpointer *) c);
       update_call_tree_add( history , c );
     }
@@ -126,7 +126,7 @@ call_list_remove_from_history( call_t* c )
   g_print("Size of history = %i\n" , call_list_get_size( history ));
 }
 
-void 
+void
 call_list_remove (calltab_t* tab, const gchar * callID)
 {
   call_t * c = call_list_get(tab, callID);
@@ -137,7 +137,7 @@ call_list_remove (calltab_t* tab, const gchar * callID)
 }
 
 
-call_t * 
+call_t *
 call_list_get_by_state (calltab_t* tab, call_state_t state )
 {
   GList * c = g_queue_find_custom (tab->callQueue, &state, get_state_callstruct);
@@ -145,11 +145,11 @@ call_list_get_by_state (calltab_t* tab, call_state_t state )
   {
     return (call_t *)c->data;
   }
-  else 
+  else
   {
     return NULL;
   }
-  
+
 }
 
 guint
@@ -158,13 +158,13 @@ call_list_get_size (calltab_t* tab)
   return g_queue_get_length (tab->callQueue);
 }
 
-call_t * 
+call_t *
 call_list_get_nth (calltab_t* tab, guint n )
 {
   return g_queue_peek_nth (tab->callQueue, n);
 }
 
-gchar * 
+gchar *
 call_get_name (const call_t * c)
 {
   gchar * end = g_strrstr(c->from, "\"");
@@ -176,7 +176,7 @@ call_get_name (const call_t * c)
   }
 }
 
-gchar * 
+gchar *
 call_get_number (const call_t * c)
 {
   gchar * number = g_strrstr(c->from, "<") + 1;
@@ -192,7 +192,7 @@ call_get_recipient( const call_t * c )
 }
 
 
-call_t * 
+call_t *
 call_list_get (calltab_t* tab, const gchar * callID )
 {
   GList * c = g_queue_find_custom (tab->callQueue, callID, is_callID_callstruct);
@@ -200,7 +200,7 @@ call_list_get (calltab_t* tab, const gchar * callID )
   {
     return (call_t *)c->data;
   }
-  else 
+  else
   {
     return NULL;
   }
@@ -218,3 +218,27 @@ call_get_selected (calltab_t* tab)
 {
   return tab->selectedCall;
 }
+
+void create_new_call (gchar *to, gchar *from, call_state_t state, gchar *accountID, call_t **new_call) {
+
+    gchar *call_id;
+    call_t *call;
+
+    call = g_new0 (call_t, 1);
+    call->to = g_strdup (to); 
+    call->from = g_strdup (from);
+    call->state = state;
+    call->accountID = g_strdup (accountID);
+    call->_start = 0;
+    call->_stop = 0;
+
+    call_id = g_new0(gchar, 30);
+    g_sprintf(call_id, "%d", rand());
+    call->callID = g_strdup (call_id);
+
+    *new_call = call;
+}
+
+void attach_thumbnail (call_t *call, GdkPixbuf *pixbuf) {
+    call->contact_thumbnail = pixbuf;
+}
diff --git a/sflphone-gtk/src/calllist.h b/sflphone-gtk/src/calllist.h
index 98ed11dd7d3791f91b925aab902e15d1ef804a68..bfd773263bc7bf227f8341f15878723092b3ffd6 100644
--- a/sflphone-gtk/src/calllist.h
+++ b/sflphone-gtk/src/calllist.h
@@ -1,22 +1,22 @@
 /*
  *  Copyright (C) 2007 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.
  */
- 
+
 #ifndef __CALLLIST_H__
 #define __CALLLIST_H__
 
@@ -25,31 +25,31 @@
 /** @file calllist.h
   * @brief A list to hold calls.
   */
-  
-/** @enum call_state_t 
+
+/** @enum call_state_t
   * This enum have all the states a call can take.
   */
 typedef enum
 {  /** Invalid state */
-   CALL_STATE_INVALID = 0, 
+   CALL_STATE_INVALID = 0,
    /** Ringing incoming call */
-   CALL_STATE_INCOMING, 
+   CALL_STATE_INCOMING,
    /** Ringing outgoing call */
-   CALL_STATE_RINGING,  
+   CALL_STATE_RINGING,
    /** Call to which the user can speak and hear */
-   CALL_STATE_CURRENT,  
+   CALL_STATE_CURRENT,
    /** Call which numbers are being added by the user */
-   CALL_STATE_DIALING,  
+   CALL_STATE_DIALING,
    /** Call is on hold */
-   CALL_STATE_HOLD,      
+   CALL_STATE_HOLD,
    /** Call has failed */
-   CALL_STATE_FAILURE,      
+   CALL_STATE_FAILURE,
    /** Call is busy */
-   CALL_STATE_BUSY,        
+   CALL_STATE_BUSY,
    /** Call is being transfert.  During this state, the user can enter the new number. */
    CALL_STATE_TRANSFERT,
    /** Call is on hold */
-   CALL_STATE_RECORD       
+   CALL_STATE_RECORD
 } call_state_t;
 
 /**
@@ -64,25 +64,51 @@ typedef enum
   MISSED
 } history_state_t;
 
+/**
+ * @enum call_type
+ * This enum have all types of call
+ */
+typedef enum
+{
+  CALL,
+  HISTORY,
+  CONTACT
+} call_type_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
+} contact_type_t;
+
 /** @struct call_t
   * @brief Call information.
-  * This struct holds information about a call.    
+  * This struct holds information about a call.
   */
 typedef struct  {
+  /** Type of call entry */
+  call_type_t call_type;
   /** Unique identifier of the call */
   gchar * callID;
   /** The account used to place/receive the call */
   gchar * accountID;
-/** The information about the calling person.  See call_get_name() and call_get_number()
+  /** The information about the calling person.  See call_get_name() and call_get_number()
     * on how to get the name and number separately. */
   gchar * from;
   /** The number we are calling.  Only used when dialing out */
   gchar * to;
   /** The current state of the call */
   call_state_t state;
-  /** The history state */
+  /** The history state if necessary */
   history_state_t history_state;
 
+  GdkPixbuf *contact_thumbnail;
+
   time_t _start;
   time_t _stop;
 
@@ -100,6 +126,7 @@ typedef struct {
 
 calltab_t* current_calls;
 calltab_t* history;
+calltab_t* contacts;
 
 /** This function initialize a call list. */
 void call_list_init (calltab_t* tab);
@@ -111,22 +138,22 @@ void call_list_clean(calltab_t* tab);
 void call_list_reset (calltab_t* tab);
 
 /** Get the maximun number of calls in the history calltab */
-gdouble call_history_get_max_calls( void ); 
+gdouble 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 ); 
+void call_history_set_max_calls( const gdouble number );
 
-/** This function append a call to list. 
-  * @param c The call you want to add 
+/** This function append a call to list.
+  * @param c The call you want to add
   * */
 void call_list_add (calltab_t* tab, call_t * c);
 
-/** This function remove a call from list. 
+/** This function remove a call from list.
   * @param callID The callID of the call you want to remove
   */
 void call_list_remove (calltab_t* tab, const gchar * callID);
 
-/** Return the first call that corresponds to the state.  
+/** Return the first call that corresponds to the state.
   * This is usefull for unique states as DIALING and CURRENT.
   * @param state The state
   * @return A call or NULL */
@@ -151,10 +178,10 @@ call_t * call_list_get (calltab_t* tab, const gchar * callID );
   * @return The full name of the caller or an empty string */
 gchar * call_get_name ( const call_t * c);
 
-/** 
+/**
  * This function parse the call_t.from field to return the number
  * @param c The call
- * @return The number of the caller 
+ * @return The number of the caller
  */
 gchar * call_get_number (const call_t * c);
 
@@ -178,4 +205,8 @@ void call_list_clean_history();
  */
 void call_list_remove_from_history( call_t* c);
 
-#endif 
+void create_new_call (gchar *to, gchar *from, call_state_t state, gchar *accountID, call_t **new_call);
+
+void attach_thumbnail (call_t *call, GdkPixbuf *pixbuf);
+
+#endif
diff --git a/sflphone-gtk/src/calltab.c b/sflphone-gtk/src/calltab.c
index ca78b0269c4dae65454af0bb3376b4f95e4ca9a0..1ec9a9a95d357d03fa90fc93a8729924d0a6b020 100644
--- a/sflphone-gtk/src/calltab.c
+++ b/sflphone-gtk/src/calltab.c
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2007 Savoir-Faire Linux inc.
  *  Author: Antoine Reversat <antoine.reversat@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,6 +27,7 @@ calltab_t*
 calltab_init()
 {
 	calltab_t* ret;
+
 	ret = malloc(sizeof(calltab_t));
 
 	ret->store = NULL;
@@ -37,6 +38,6 @@ calltab_init()
 
 	create_call_tree(ret);
 	call_list_init(ret);
-	
+
 	return ret;
 }
diff --git a/sflphone-gtk/src/calltab.h b/sflphone-gtk/src/calltab.h
index dcc47b2605551556b6085ca6b67fab3021697d65..7d84696df2fa4f4471455b09859b54ccb75d5a79 100644
--- a/sflphone-gtk/src/calltab.h
+++ b/sflphone-gtk/src/calltab.h
@@ -1,22 +1,22 @@
 /*
  *  Copyright (C) 2007 Savoir-Faire Linux inc.
  *  Author: Antoine Reversat <antoine.reversat@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 __NOTEBOOK_H__
 #define __NOTEBOOK_H__
 
diff --git a/sflphone-gtk/src/calltree.c b/sflphone-gtk/src/calltree.c
index 7359a34bb1e6dde63b06c4e80bf607b236a5e4aa..b9fbdab365ebf7065185f8e2469a834cb0fc19e8 100644
--- a/sflphone-gtk/src/calltree.c
+++ b/sflphone-gtk/src/calltree.c
@@ -2,17 +2,17 @@
  *  Copyright (C) 2007 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.
@@ -27,8 +27,8 @@
 #include <calllist.h>
 #include <menus.h>
 #include <dbus.h>
-
-
+#include <contactlist/eds.h>
+#include "addressbook-config.h"
 
 GtkWidget   * toolbar;
 GtkToolItem * pickupButton;
@@ -37,30 +37,33 @@ GtkToolItem * hangupButton;
 GtkToolItem * holdButton;
 GtkToolItem * transfertButton;
 GtkToolItem * unholdButton;
-// GtkToolItem * historyButton;
 GtkToolItem * mailboxButton;
 GtkToolItem * recButton;
+GtkToolItem * historyButton;
+GtkToolItem * contactButton;
+
 guint transfertButtonConnId; //The button toggled signal connection ID
-gboolean history_shown;
 
-  void
-switch_tab()
+void
+free_call_t (call_t *c)
 {
-  (gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(historyButton)))? 
-    gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(historyButton), FALSE):
-    gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(historyButton), TRUE);
+    g_free (c->callID);
+    g_free (c->accountID);
+    g_free (c->from);
+    g_free (c->to);
+    g_free (c);
 }
 
 /**
  * Show popup menu
  */
-  static gboolean            
+  static gboolean
 popup_menu (GtkWidget *widget,
     gpointer   user_data UNUSED)
 {
   show_popup_menu(widget, NULL);
   return TRUE;
-}            
+}
 
   static gboolean
 is_inserted( GtkWidget* button )
@@ -89,50 +92,52 @@ button_pressed(GtkWidget* widget, GdkEventButton *event, gpointer user_data UNUS
 /**
  * Make a call
  */
-  static void 
+  static void
 call_button( GtkWidget *widget UNUSED, gpointer   data UNUSED)
 {
-  call_t * selectedCall = call_get_selected(active_calltree);
-  call_t* newCall =  g_new0 (call_t, 1);
-  printf("Call button pressed\n");
+  call_t * selectedCall;
+  call_t* new_call;
+  gchar *to, *from;
+
+  selectedCall = call_get_selected(active_calltree);
+  
   if(call_list_get_size(current_calls)>0)
     sflphone_pick_up();
+  
   else if(call_list_get_size(active_calltree) > 0){
     if( selectedCall)
     {
       printf("Calling a called num\n");
 
-      newCall->to = g_strdup(call_get_number(selectedCall));
-      newCall->from = g_strconcat("\"\" <", call_get_number(selectedCall), ">",NULL);
-      newCall->state = CALL_STATE_DIALING;
-      newCall->callID = g_new0(gchar, 30);
-      g_sprintf(newCall->callID, "%d", rand()); 
-      newCall->_start = 0;
-      newCall->_stop = 0;
-
-      printf("call : from : %s to %s\n", newCall->from, newCall->to);
-      call_list_add(current_calls, newCall);
-      update_call_tree_add(current_calls, newCall);
-      sflphone_place_call(newCall);
-      if( active_calltree == history )  switch_tab();
+      to = g_strdup(call_get_number(selectedCall));
+      from = g_strconcat("\"\" <", call_get_number(selectedCall), ">",NULL);
+
+      create_new_call (to, from, CALL_STATE_DIALING, "", &new_call);
+
+      printf("call : from : %s to %s\n", new_call->from, new_call->to);
+
+      call_list_add(current_calls, new_call);
+      update_call_tree_add(current_calls, new_call);
+      sflphone_place_call(new_call);
+      display_calltree (current_calls);
     }
     else
     {
       sflphone_new_call();
-      if( active_calltree == history )  switch_tab();
+      display_calltree(current_calls);
     }
   }
   else
   {
     sflphone_new_call();
-    if( active_calltree == history )  switch_tab();
+    display_calltree(current_calls);
   }
 }
 
 /**
  * Hang up the line
  */
-  static void 
+  static void
 hang_up( GtkWidget *widget UNUSED, gpointer   data UNUSED)
 {
   sflphone_hang_up();
@@ -141,7 +146,7 @@ hang_up( GtkWidget *widget UNUSED, gpointer   data UNUSED)
 /**
  * Hold the line
  */
-  static void 
+  static void
 hold( GtkWidget *widget UNUSED, gpointer   data UNUSED)
 {
   sflphone_on_hold();
@@ -150,7 +155,7 @@ hold( GtkWidget *widget UNUSED, gpointer   data UNUSED)
 /**
  * Transfert the line
  */
-  static void 
+  static void
 transfert  (GtkToggleToolButton *toggle_tool_button,
     gpointer             user_data UNUSED )
 {
@@ -168,56 +173,86 @@ transfert  (GtkToggleToolButton *toggle_tool_button,
 /**
  * Unhold call
  */
-  static void 
+  static void
 unhold( GtkWidget *widget UNUSED, gpointer   data UNUSED)
 {
   sflphone_off_hold();
 }
 
-  static void
-toggle_history(GtkToggleToolButton *toggle_tool_button UNUSED,
-    gpointer	user_data UNUSED)
+static void toggle_button_cb (GtkToggleToolButton *widget, gpointer user_data)
 {
-	GtkTreeSelection *sel;
-	if(history_shown){
-		active_calltree = current_calls;
-		gtk_widget_hide(history->tree);
-		gtk_widget_show(current_calls->tree);
-		history_shown = FALSE;
-	}else{
-		active_calltree = history;
-		gtk_widget_hide(current_calls->tree);
-		gtk_widget_show(history->tree);
-		history_shown = TRUE;
-	}
-	sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (active_calltree->view));
-	g_signal_emit_by_name(sel, "changed");
-	toolbar_update_buttons();
-	gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(histfilter));
+    calltab_t * to_switch;
+    gboolean toggle;
+
+    to_switch = (calltab_t*) user_data;
+    toggle = gtk_toggle_tool_button_get_active (widget);
+
+    g_print ("%i\n", toggle);
+
+    (toggle)? display_calltree (to_switch) : display_calltree (current_calls);
+}
+
 
+void create_new_entry_in_contactlist (gchar *contact_name, gchar *contact_phone, contact_type_t type, GdkPixbuf *photo){
+   
+    gchar *from;
+    call_t *new_call;
+    GdkPixbuf *pixbuf;
+
+    /* Check if the information is valid */
+    if (g_strcasecmp (contact_phone, EMPTY_ENTRY) != 0){
+        from = g_strconcat("\"" , contact_name, "\"<", contact_phone, ">", NULL);
+        create_new_call (from, from, CALL_STATE_DIALING, "", &new_call);
+
+        // Attach a pixbuf to a contact
+        if (photo) {
+            attach_thumbnail (new_call, photo);
+        }
+        else {
+            switch (type) {
+                case CONTACT_PHONE_BUSINESS:
+                    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/face-monkey.svg", NULL);
+                    break;
+                case CONTACT_PHONE_HOME:
+                    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/home.svg", NULL);
+                    break;
+                case CONTACT_PHONE_MOBILE:
+                    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/users.svg", NULL);
+                    break;
+                default:
+                    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/contact_default.svg", NULL);
+                    break;
+            }
+            attach_thumbnail (new_call, pixbuf);
+        }
+
+        call_list_add (contacts, new_call);
+        update_call_tree_add(contacts, new_call);
+    }
 }
 
   static void
 call_mailbox( GtkWidget* widget UNUSED, gpointer data UNUSED)
 {
-  account_t* current = account_list_get_current();
-  if( current == NULL ) // Should not happens
-    return; 
-  call_t* mailboxCall = g_new0( call_t , 1);
-  mailboxCall->state = CALL_STATE_DIALING;
-  mailboxCall->to = g_strdup(g_hash_table_lookup(current->properties, ACCOUNT_MAILBOX));
-  mailboxCall->from = g_markup_printf_escaped(_("\"Voicemail\" <%s>"),  mailboxCall->to);
-  mailboxCall->callID = g_new0(gchar, 30);
-  g_sprintf(mailboxCall->callID, "%d", rand());
-  mailboxCall->accountID = g_strdup(current->accountID);
-  mailboxCall->_start = 0;
-  mailboxCall->_stop = 0;
-  g_print("TO : %s\n" , mailboxCall->to);
-  call_list_add( current_calls , mailboxCall );
-  update_call_tree_add( current_calls , mailboxCall );    
-  update_menus();
-  sflphone_place_call( mailboxCall );
-  if( active_calltree == history )  switch_tab();
+    account_t* current;
+    call_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));
+    from = g_markup_printf_escaped(_("\"Voicemail\" <%s>"),  to);
+    account_id = g_strdup (current->accountID);
+  
+    create_new_call (to, from, CALL_STATE_DIALING, account_id, &mailbox_call);
+    g_print("TO : %s\n" , mailbox_call->to);
+    call_list_add( current_calls , mailbox_call );
+    update_call_tree_add( current_calls , mailbox_call );
+    update_menus();
+    sflphone_place_call( mailbox_call );
+    display_calltree(current_calls);
 }
 
 
@@ -225,14 +260,14 @@ call_mailbox( GtkWidget* widget UNUSED, gpointer data UNUSED)
 /**
  * Static rec_button
  */
-static void 
+static void
 rec_button( GtkWidget *widget UNUSED, gpointer   data UNUSED)
 {
   sflphone_rec_call();
 }
 
 
-  void 
+  void
 toolbar_update_buttons ()
 {
   gtk_widget_set_sensitive( GTK_WIDGET(callButton),       FALSE);
@@ -262,12 +297,12 @@ toolbar_update_buttons ()
   call_t * selectedCall = call_get_selected(active_calltree);
   if (selectedCall)
   {
-    switch(selectedCall->state) 
+    switch(selectedCall->state)
     {
       case CALL_STATE_INCOMING:
 	gtk_widget_set_sensitive( GTK_WIDGET(pickupButton),     TRUE);
 	gtk_widget_set_sensitive( GTK_WIDGET(hangupButton),	TRUE);
-	g_object_ref(callButton);	
+	g_object_ref(callButton);
 	gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(callButton));
 	gtk_toolbar_insert(GTK_TOOLBAR(toolbar), pickupButton, 0);
 	break;
@@ -300,7 +335,7 @@ toolbar_update_buttons ()
       case CALL_STATE_BUSY:
       case CALL_STATE_FAILURE:
 	gtk_widget_set_sensitive( GTK_WIDGET(hangupButton),     TRUE);
-	break; 
+	break;
       case CALL_STATE_TRANSFERT:
 	gtk_signal_handler_block(GTK_OBJECT(transfertButton),transfertButtonConnId);
 	gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(transfertButton), TRUE);
@@ -318,11 +353,11 @@ toolbar_update_buttons ()
         gtk_widget_set_sensitive( GTK_WIDGET(recButton),        TRUE);
 	break;
       default:
-	g_warning("Should not happen!");
+	g_warning("Toolbar update - Should not happen!");
 	break;
     }
   }
-  else 
+  else
   {
     if( account_list_get_size() > 0 )
     {
@@ -339,8 +374,8 @@ toolbar_update_buttons ()
 
 
 /* Call back when the user click on a call in the list */
-  static void 
-selected(GtkTreeSelection *sel, void* data UNUSED ) 
+  static void
+selected(GtkTreeSelection *sel, void* data UNUSED )
 {
   GtkTreeIter  iter;
   GValue val;
@@ -362,11 +397,12 @@ selected(GtkTreeSelection *sel, void* data UNUSED )
 void  row_activated(GtkTreeView       *tree_view UNUSED,
     GtkTreePath       *path UNUSED,
     GtkTreeViewColumn *column UNUSED,
-    void * data UNUSED) 
+    void * data UNUSED)
 {
   g_print("double click action\n");
   call_t* selectedCall;
-  call_t* newCall;
+  call_t* new_call;
+  gchar *to, *from, *account_id;
   selectedCall = call_get_selected( active_calltree );
 
   if (selectedCall)
@@ -374,7 +410,7 @@ void  row_activated(GtkTreeView       *tree_view UNUSED,
     // Get the right event from the right calltree
     if( active_calltree == current_calls )
     {
-      switch(selectedCall->state)  
+      switch(selectedCall->state)
       {
 	case CALL_STATE_INCOMING:
 	  dbus_accept(selectedCall);
@@ -392,33 +428,28 @@ void  row_activated(GtkTreeView       *tree_view UNUSED,
 	  sflphone_place_call (selectedCall);
 	  break;
 	default:
-	  g_warning("Should not happen!");
+	  g_warning("Row activated - Should not happen!");
 	  break;
       }
     }
     // if history
     else
     {
-      newCall = g_new0( call_t, 1 );
-      newCall->to = g_strdup(call_get_number(selectedCall));
-      newCall->from = g_strconcat("\"\" <", call_get_number(selectedCall), ">",NULL);
-      newCall->state = CALL_STATE_DIALING;
-      newCall->callID = g_new0(gchar, 30);
-      g_sprintf(newCall->callID, "%d", rand()); 
-      newCall->_start = 0;
-      newCall->_stop = 0;
-      printf("call : account : %s \n", selectedCall->accountID);
-      newCall->accountID = selectedCall->accountID;
-      printf("call : from : %s to %s\n", newCall->from, newCall->to);
-      call_list_add(current_calls, newCall);
-      update_call_tree_add(current_calls, newCall);
-      sflphone_place_call(newCall);
-      switch_tab();
+      to = g_strdup(call_get_number(selectedCall));
+      from = g_strconcat("\"\" <", call_get_number(selectedCall), ">",NULL);
+      account_id = g_strdup (selectedCall->accountID);
+
+      create_new_call (to, from, CALL_STATE_DIALING, account_id, &new_call);
+
+      call_list_add(current_calls, new_call);
+      update_call_tree_add(current_calls, new_call);
+      sflphone_place_call(new_call);
+      display_calltree(current_calls);
     }
   }
 }
 
-  GtkWidget * 
+  GtkWidget *
 create_toolbar ()
 {
   GtkWidget *ret;
@@ -445,7 +476,7 @@ create_toolbar ()
   gtk_widget_set_tooltip_text(GTK_WIDGET(pickupButton), _("Pick up"));
 #endif
   gtk_widget_set_state( GTK_WIDGET(pickupButton), GTK_STATE_INSENSITIVE);
-  g_signal_connect(G_OBJECT (pickupButton), "clicked", 
+  g_signal_connect(G_OBJECT (pickupButton), "clicked",
       G_CALLBACK (call_button), NULL);
   gtk_widget_show_all(GTK_WIDGET(pickupButton));
 
@@ -457,7 +488,7 @@ create_toolbar ()
   gtk_widget_set_state( GTK_WIDGET(hangupButton), GTK_STATE_INSENSITIVE);
   g_signal_connect (G_OBJECT (hangupButton), "clicked",
       G_CALLBACK (hang_up), NULL);
-  gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(hangupButton), -1);  
+  gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(hangupButton), -1);
 
   image = gtk_image_new_from_file( ICONS_DIR "/unhold.svg");
   unholdButton = gtk_tool_button_new (image, _("Off Hold"));
@@ -490,21 +521,29 @@ create_toolbar ()
   gtk_widget_set_state( GTK_WIDGET(transfertButton), GTK_STATE_INSENSITIVE);
   transfertButtonConnId = g_signal_connect (G_OBJECT (transfertButton), "toggled",
       G_CALLBACK (transfert), NULL);
-  gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(transfertButton), -1);  
+  gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(transfertButton), -1);
 
   image = gtk_image_new_from_file( ICONS_DIR "/history2.svg");
   historyButton = gtk_toggle_tool_button_new();
-  gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(historyButton), image);
+  gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (historyButton), image);
 #if GTK_CHECK_VERSION(2,12,0)
   gtk_widget_set_tooltip_text(GTK_WIDGET(historyButton), _("History"));
 #endif
-  gtk_tool_button_set_label(GTK_TOOL_BUTTON(historyButton), _("History"));
-  g_signal_connect (G_OBJECT (historyButton), "toggled",
-      G_CALLBACK (toggle_history), NULL);
-  gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(historyButton), -1);  
-  history_shown = FALSE;
+  gtk_tool_button_set_label (GTK_TOOL_BUTTON (historyButton), _("History"));
+  g_signal_connect (G_OBJECT (historyButton), "toggled", G_CALLBACK (toggle_button_cb), history);
+  gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(historyButton), -1);
   active_calltree = current_calls;
 
+  image = gtk_image_new_from_file( ICONS_DIR "/addressbook.svg");
+  contactButton = gtk_toggle_tool_button_new();
+  gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (contactButton), image);
+#if GTK_CHECK_VERSION(2,12,0)
+  gtk_widget_set_tooltip_text(GTK_WIDGET(contactButton), _("Address book"));
+#endif
+  gtk_tool_button_set_label (GTK_TOOL_BUTTON (contactButton), _("Address book"));
+  g_signal_connect (G_OBJECT (contactButton), "toggled", G_CALLBACK (toggle_button_cb), contacts);
+  gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(contactButton), -1);
+
   image = gtk_image_new_from_file( ICONS_DIR "/mailbox.svg");
   mailboxButton = gtk_tool_button_new( image , _("Voicemail"));
   gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(mailboxButton), image);
@@ -516,9 +555,6 @@ create_toolbar ()
       G_CALLBACK (call_mailbox), NULL);
   gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(mailboxButton), -1);
 
-  
-  //image = gtk_image_new_from_file( ICONS_DIR "/record.svg");
-  //recButton = gtk_tool_button_new (image, _("Record a call"));
   recButton = gtk_tool_button_new_from_stock (GTK_STOCK_MEDIA_RECORD);
 #if GTK_CHECK_VERSION(2,12,0)
   gtk_widget_set_tooltip_text(GTK_WIDGET(recButton), _("Record a call"));
@@ -531,14 +567,14 @@ create_toolbar ()
 
   return ret;
 
-}  
+}
 static gboolean
 on_key_released (GtkWidget   *widget UNUSED,
                 GdkEventKey *event,
-                gpointer     user_data UNUSED)  
+                gpointer     user_data UNUSED)
 {
   // If a modifier key is pressed, it's a shortcut, pass along
-  if(event->state & GDK_CONTROL_MASK || 
+  if(event->state & GDK_CONTROL_MASK ||
      event->state & GDK_MOD1_MASK    ||
      event->keyval == 60             || // <
      event->keyval == 62             || // >
@@ -554,7 +590,16 @@ on_key_released (GtkWidget   *widget UNUSED,
   return TRUE;
 }
 
-  void 
+/**
+ * Reset call tree
+ */
+  void
+reset_call_tree (calltab_t* tab)
+{
+  gtk_list_store_clear (tab->store);
+}
+
+  void
 create_call_tree (calltab_t* tab)
 {
   GtkWidget *sw;
@@ -562,7 +607,7 @@ create_call_tree (calltab_t* tab)
   GtkTreeViewColumn *col;
   GtkTreeSelection *sel;
 
-  tab->tree = gtk_vbox_new(FALSE, 10); 
+  tab->tree = gtk_vbox_new(FALSE, 10);
 
   gtk_container_set_border_width (GTK_CONTAINER (tab->tree), 0);
 
@@ -571,8 +616,8 @@ create_call_tree (calltab_t* tab)
   gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN);
   g_signal_connect (G_OBJECT ( sw ), "key-release-event",G_CALLBACK (on_key_released), NULL);
 
-  tab->store = gtk_list_store_new (3, 
-      GDK_TYPE_PIXBUF,// Icon 
+  tab->store = gtk_list_store_new (3,
+      GDK_TYPE_PIXBUF,// Icon
       G_TYPE_STRING,  // Description
       G_TYPE_POINTER  // Pointer to the Object
       );
@@ -586,10 +631,10 @@ create_call_tree (calltab_t* tab)
 
   // Connect the popup menu
   g_signal_connect (G_OBJECT (tab->view), "popup-menu",
-      G_CALLBACK (popup_menu), 
+      G_CALLBACK (popup_menu),
       NULL);
   g_signal_connect (G_OBJECT (tab->view), "button-press-event",
-      G_CALLBACK (button_pressed), 
+      G_CALLBACK (button_pressed),
       NULL);
 
 
@@ -617,13 +662,13 @@ create_call_tree (calltab_t* tab)
 
   gtk_box_pack_start(GTK_BOX(tab->tree), sw, TRUE, TRUE, 0);
 
-  gtk_widget_show(tab->tree); 
+  gtk_widget_show(tab->tree);
 
   //toolbar_update_buttons();
 
 }
 
-  void 
+  void
 update_call_tree_remove (calltab_t* tab, call_t * c)
 {
   GtkTreeIter iter;
@@ -655,7 +700,7 @@ update_call_tree_remove (calltab_t* tab, call_t * c)
   toolbar_update_buttons();
 }
 
-  void 
+  void
 update_call_tree (calltab_t* tab, call_t * c)
 {
     g_print("update call tree\n");
@@ -685,16 +730,16 @@ update_call_tree (calltab_t* tab, call_t * c)
 	gchar * duration="";
 	if(c->state == CALL_STATE_TRANSFERT)
 	{
-	  description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>Transfert to:</i> %s",  
-	      call_get_number(c), 
-	      call_get_name(c), 
+	  description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>\n<i>Transfert to:</i> %s",
+	      call_get_number(c),
+	      call_get_name(c),
 	      c->to);
 	}
 	else
 	{
-	  description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", 
+	  description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>",
 	      call_get_number(c),
-	      call_get_name(c)); 
+	      call_get_name(c));
 	}
 
 	if( tab == current_calls )
@@ -726,7 +771,7 @@ update_call_tree (calltab_t* tab, call_t * c)
 	      pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/rec_call.svg", NULL);
 	      break;
 	    default:
-	      g_warning("Should not happen!");
+	      g_warning("Update calltree - Should not happen!");
 	  }
 	}
 	else
@@ -746,10 +791,10 @@ update_call_tree (calltab_t* tab, call_t * c)
 	      pixbuf = gdk_pixbuf_new_from_file( ICONS_DIR "/missed.svg", NULL);
 	      break;
 	    default:
-	      g_print("No history state\n");  
+	      g_print("No history state\n");
 	      break;
 	  }
-	  date = timestamp_get_call_date(); 
+	  date = timestamp_get_call_date();
 	  duration = process_call_duration(c);
 	  duration = g_strconcat( date , duration , NULL);
 	  description = g_strconcat( description , duration, NULL);
@@ -770,14 +815,14 @@ update_call_tree (calltab_t* tab, call_t * c)
 	if (pixbuf != NULL)
 	  g_object_unref(G_OBJECT(pixbuf));
 
-      } 
+      }
     }
 
-  } 
+  }
   toolbar_update_buttons();
 }
 
-  void 
+  void
 update_call_tree_add (calltab_t* tab, call_t * c)
 {
   if( tab == history && ( call_list_get_size( tab ) > dbus_get_max_calls() ) )
@@ -790,9 +835,9 @@ update_call_tree_add (calltab_t* tab, call_t * c)
   // New call in the list
   gchar * description;
   gchar * date="";
-  description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>", 
+  description = g_markup_printf_escaped("<b>%s</b> <i>%s</i>",
       call_get_number(c),
-      call_get_name(c)); 
+      call_get_name(c));
 
 
   gtk_list_store_prepend (tab->store, &iter);
@@ -811,14 +856,15 @@ update_call_tree_add (calltab_t* tab, call_t * c)
 	pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL);
 	break;
       default:
-	g_warning("Should not happen!");
+	g_warning("Update calltree add - Should not happen!");
     }
   }
-  else{
+
+  else if (tab == history) {
     switch(c->history_state)
     {
       case INCOMING:
-	pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/incoming.svg", NULL);
+	    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);
@@ -827,12 +873,22 @@ update_call_tree_add (calltab_t* tab, call_t * c)
 	pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/missed.svg", NULL);
 	break;
       default:
-	g_warning("History - Should not happen!");
+	    g_warning("History - Should not happen!");
     }
-    date = timestamp_get_call_date(); 
+    date = timestamp_get_call_date();
     description = g_strconcat( date , description , NULL);
   }
 
+  else if (tab == contacts) {
+    pixbuf = c->contact_thumbnail; 
+    description = g_strconcat( description , NULL);
+  }
+
+  else {
+        g_warning ("This widget doesn't exist - This is a bug in the application\n.");
+  }
+
+
   //Resize it
   if(pixbuf)
   {
@@ -850,8 +906,87 @@ update_call_tree_add (calltab_t* tab, call_t * c)
   if (pixbuf != NULL)
     g_object_unref(G_OBJECT(pixbuf));
 
-
   sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tab->view));
   gtk_tree_selection_select_iter(GTK_TREE_SELECTION(sel), &iter);
   toolbar_update_buttons();
 }
+
+void display_calltree (calltab_t *tab) {
+
+    GtkTreeSelection *sel;
+
+    g_print ("display_calltree called\n");
+
+    /* If we already are displaying the specified calltree */
+    if (active_calltree == tab)
+        return;
+
+    /* case 1: we want to display the main calltree */
+    if (tab==current_calls) {
+
+        g_print ("display main tab\n");
+        
+        if (active_calltree==contacts) {
+            gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)contactButton, FALSE);
+        } else {
+            gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)historyButton, FALSE);
+        }
+    
+    }
+    
+    /* case 2: we want to display the history */
+    else if (tab==history) {
+        
+        g_print ("display history tab\n");
+
+        if (active_calltree==contacts) {
+            gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)contactButton, FALSE);
+        }
+
+        gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)historyButton, TRUE);
+    }
+
+    else if (tab==contacts) {
+    
+        g_print ("display contact tab\n");
+        
+        if (active_calltree==history) {
+            gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)historyButton, FALSE);
+        }
+        
+        gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)contactButton, TRUE);
+    }
+
+    else 
+        g_print ("calltree.c line 1050 . This is probably a bug in the application\n");
+
+
+    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));
+	g_signal_emit_by_name(sel, "changed");
+	toolbar_update_buttons();
+	//gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(histfilter));
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sflphone-gtk/src/calltree.h b/sflphone-gtk/src/calltree.h
index f1148a749f0802e8215e56bb402eef5a8d3e46ab..f307116040084dc7f11aaca0681bf7feb7e41b9c 100644
--- a/sflphone-gtk/src/calltree.h
+++ b/sflphone-gtk/src/calltree.h
@@ -1,22 +1,22 @@
 /*
  *  Copyright (C) 2007 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.
  */
- 
+
 #ifndef __CALLTREE_H__
 #define __CALLTREE_H__
 
@@ -31,9 +31,12 @@
   * @brief The GtkTreeView that list calls in the main window.
   */
 
-GtkToolItem * historyButton;
+GtkWidget * filter_entry;
 
 calltab_t* active_calltree;
+
+void free_call_t (call_t *c);
+
 /**
  * Create a new widget calltree
  * @return GtkWidget* A new widget
@@ -54,7 +57,7 @@ void update_call_tree_add (calltab_t* ct, call_t * c);
 /*
  * Update the call tree if the call state changes
  * @param c The call to update
- */ 
+ */
 void update_call_tree (calltab_t* ct, call_t * c);
 /**
  * Remove a call from the call tree
@@ -62,12 +65,16 @@ void update_call_tree (calltab_t* ct, call_t * c);
  */
 void update_call_tree_remove (calltab_t* ct, call_t * c);
 
+void reset_call_tree (calltab_t* tab);
+
 /**
  * Build the toolbar
  * @return GtkWidget* The toolbar
  */
 GtkWidget * create_toolbar();
 
-void switch_tab( void );
+void display_calltree (calltab_t *tab);
+
+void create_new_entry_in_contactlist (gchar *contact_name, gchar *contact_phone, contact_type_t type, GdkPixbuf *photo);
 
-#endif 
+#endif
diff --git a/sflphone-gtk/src/configurationmanager-glue.h b/sflphone-gtk/src/configurationmanager-glue.h
index 73169299172735238b6094755fef2ca4c797c373..194b6f27be4b6511492afa23c77d8b40d12f0ba0 100644
--- a/sflphone-gtk/src/configurationmanager-glue.h
+++ b/sflphone-gtk/src/configurationmanager-glue.h
@@ -2225,6 +2225,81 @@ org_sflphone_SFLphone_ConfigurationManager_is_stun_enabled_async (DBusGProxy *pr
   stuff->userdata = userdata;
   return dbus_g_proxy_begin_call (proxy, "isStunEnabled", org_sflphone_SFLphone_ConfigurationManager_is_stun_enabled_async_callback, stuff, g_free, G_TYPE_INVALID);
 }
+static
+#ifdef G_HAVE_INLINE
+inline
+#endif
+gboolean
+org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings (DBusGProxy *proxy, GHashTable** OUT_settings, GError **error)
+
+{
+  return dbus_g_proxy_call (proxy, "getAddressbookSettings", error, G_TYPE_INVALID, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_INT), OUT_settings, G_TYPE_INVALID);
+}
+
+typedef void (*org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings_reply) (DBusGProxy *proxy, GHashTable *OUT_settings, GError *error, gpointer userdata);
+
+static void
+org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
+{
+  DBusGAsyncData *data = (DBusGAsyncData*) user_data;
+  GError *error = NULL;
+  GHashTable* OUT_settings;
+  dbus_g_proxy_end_call (proxy, call, &error, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_INT), &OUT_settings, G_TYPE_INVALID);
+  (*(org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings_reply)data->cb) (proxy, OUT_settings, error, data->userdata);
+  return;
+}
+
+static
+#ifdef G_HAVE_INLINE
+inline
+#endif
+DBusGProxyCall*
+org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings_async (DBusGProxy *proxy, org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings_reply callback, gpointer userdata)
+
+{
+  DBusGAsyncData *stuff;
+  stuff = g_new (DBusGAsyncData, 1);
+  stuff->cb = G_CALLBACK (callback);
+  stuff->userdata = userdata;
+  return dbus_g_proxy_begin_call (proxy, "getAddressbookSettings", org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings_async_callback, stuff, g_free, G_TYPE_INVALID);
+}
+static
+#ifdef G_HAVE_INLINE
+inline
+#endif
+gboolean
+org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings (DBusGProxy *proxy, const GHashTable* IN_settings, GError **error)
+
+{
+  return dbus_g_proxy_call (proxy, "setAddressbookSettings", error, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_INT), IN_settings, G_TYPE_INVALID, G_TYPE_INVALID);
+}
+
+typedef void (*org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings_reply) (DBusGProxy *proxy, GError *error, gpointer userdata);
+
+static void
+org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
+{
+  DBusGAsyncData *data = (DBusGAsyncData*) user_data;
+  GError *error = NULL;
+  dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID);
+  (*(org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings_reply)data->cb) (proxy, error, data->userdata);
+  return;
+}
+
+static
+#ifdef G_HAVE_INLINE
+inline
+#endif
+DBusGProxyCall*
+org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings_async (DBusGProxy *proxy, const GHashTable* IN_settings, org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings_reply callback, gpointer userdata)
+
+{
+  DBusGAsyncData *stuff;
+  stuff = g_new (DBusGAsyncData, 1);
+  stuff->cb = G_CALLBACK (callback);
+  stuff->userdata = userdata;
+  return dbus_g_proxy_begin_call (proxy, "setAddressbookSettings", org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings_async_callback, stuff, g_free, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_INT), IN_settings, G_TYPE_INVALID);
+}
 #endif /* defined DBUS_GLIB_CLIENT_WRAPPERS_org_sflphone_SFLphone_ConfigurationManager */
 
 G_END_DECLS
diff --git a/sflphone-gtk/src/configwindow.c b/sflphone-gtk/src/configwindow.c
index ae4c2652818457bc116391bb9eef36cde179075c..81063f99aa69c8020d0464c99f56a06df48b6b4e 100644
--- a/sflphone-gtk/src/configwindow.c
+++ b/sflphone-gtk/src/configwindow.c
@@ -28,6 +28,7 @@
 #include <dbus.h>
 #include <mainwindow.h>
 #include <audioconf.h>
+#include <addressbook-config.h>
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -738,6 +739,7 @@ show_config_window ()
     GtkDialog * dialog;
     GtkWidget * notebook;
     GtkWidget * tab;
+    guint result;
 
     dialogOpen = TRUE;
 
@@ -774,9 +776,16 @@ show_config_window ()
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Record")));
     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);
+
     gtk_notebook_set_current_page( GTK_NOTEBOOK( notebook) ,  1);
 
-    gtk_dialog_run(dialog);
+    result = gtk_dialog_run(dialog);
+
+    save_configuration_parameters ();
 
     dialogOpen = FALSE;
 
@@ -843,3 +852,9 @@ void config_window_set_stun_visible()
 {
     gtk_widget_set_sensitive( GTK_WIDGET(stunFrame), TRUE );
 }
+
+void save_configuration_parameters (void) {
+
+    addressbook_save_parameters ();
+
+}
diff --git a/sflphone-gtk/src/configwindow.h b/sflphone-gtk/src/configwindow.h
index ffb212706be5b3b48d2b125dc139bb2c6ade23df..4585b99ff665943f58a990346aeaa0b59ba5723c 100644
--- a/sflphone-gtk/src/configwindow.h
+++ b/sflphone-gtk/src/configwindow.h
@@ -116,4 +116,6 @@ void show_accounts_window();
 
 void config_window_set_stun_visible();
 
+void save_configuration_parameters (void);
+
 #endif 
diff --git a/sflphone-gtk/src/contactlist/Makefile.am b/sflphone-gtk/src/contactlist/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..d8fee4636b19b1bd2d28abe3d21b7753647c0412
--- /dev/null
+++ b/sflphone-gtk/src/contactlist/Makefile.am
@@ -0,0 +1,8 @@
+noinst_LTLIBRARIES = libcontact.la
+
+libcontact_la_SOURCES = \
+			eds.c
+
+libcontact_la_LDFLAGS= -pthread -lebook-1.2 -lgnome-2 -lpopt -ledataserver-1.2 -lxml2 -lgconf-2 -lsoup-2.4 -lbonobo-2 -lbonobo-activation -lORBit-2 -lgthread-2.0 -lrt -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lgio-2.0 -lcairo -lpango-1.0 -lfreetype -lz -lfontconfig -lgmodule-2.0 -lgobject-2.0 -lglib-2.0
+
+libcontact_la_CFLAGS=-DORBIT2=1 -pthread -I/usr/include/evolution-data-server-2.24 -I/usr/include/libbonobo-2.0 -I/usr/include/libgnome-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/orbit-2.0 -I/usr/include/bonobo-activation-2.0 -I/usr/include/gconf/2 -I/usr/include/gnome-vfs-2.0 -I/usr/lib/gnome-vfs-2.0/include -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/libxml2 -I/usr/include/libsoup-2.4 -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pygtk-2.0
diff --git a/sflphone-gtk/src/contactlist/TODO b/sflphone-gtk/src/contactlist/TODO
new file mode 100644
index 0000000000000000000000000000000000000000..d520dd99e7feff8a03b173935df27517818fb38f
--- /dev/null
+++ b/sflphone-gtk/src/contactlist/TODO
@@ -0,0 +1,7 @@
+Ref trac http://dev.savoirfairelinux.net/sflphone/report/3
+
+* Ticket #163
+* Ticket #164
+* Ticket #165
+* Ticket #166
+
diff --git a/sflphone-gtk/src/contactlist/eds.c b/sflphone-gtk/src/contactlist/eds.c
new file mode 100644
index 0000000000000000000000000000000000000000..6071f27e96b2828284c850c8ffd05cabbff94cef
--- /dev/null
+++ b/sflphone-gtk/src/contactlist/eds.c
@@ -0,0 +1,318 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Julien Bonjean <julien.bonjean@savoirfairelinux.com>
+ *
+ *  File originally copied from evolution module of deskbar-applet 2.24.1
+ *   Authors :
+ *    Nigel Tao <nigel.tao@myrealbox.com>
+ *    Raphaël Slinckx <raphael@slinckx.net>
+ *    Mikkel Kamstrup Erlandsen <kamstrup@daimi.au.dk>
+ *    Sebastian Pölsterl <marduk@k-d-w.org>
+ *
+ *  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 <glib.h>
+#include <glib/gstring.h>
+#include <string.h>
+#include <pango/pango.h>
+#include "eds.h"
+
+typedef struct _Handler_And_Data {
+    SearchAsyncHandler  handler;
+    gpointer            user_data;
+    GList              *hits;
+    int                 max_results_remaining;
+    int                 book_views_remaining;
+} Handler_And_Data;
+
+static GSList *books = NULL;
+static int pixbuf_size = 32;
+
+static EContactField search_fields[] = { E_CONTACT_FULL_NAME, E_CONTACT_PHONE_BUSINESS, E_CONTACT_NICKNAME, 0 };
+static int n_search_fields = G_N_ELEMENTS (search_fields) - 1;
+
+    void
+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);
+}
+
+/**
+ * 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;
+        }
+    }
+    g_free (attrs);
+    return parts;
+}
+
+/**
+ * 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)
+{
+    EBookQuery *query;
+    GArray *parts = split_query_string (s);
+    EBookQuery ***field_queries;
+    EBookQuery **q;
+    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);
+
+    query = e_book_query_or (n_search_fields, q, TRUE);
+
+    for (i = 0; i < n_search_fields; i++) {
+        g_free (field_queries[i]);
+    }
+    g_free (field_queries);
+    g_free (q);
+
+    return query;
+}
+
+static GdkPixbuf*
+pixbuf_from_contact (EContact *contact)
+{
+    GdkPixbuf *pixbuf = NULL;
+    EContactPhoto *photo = e_contact_get (contact, E_CONTACT_PHOTO);
+    if (photo) {
+        GdkPixbufLoader *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) {
+            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;
+            }
+        }
+        e_contact_photo_free (photo);
+    }
+    return pixbuf;
+}
+
+/**
+ * Initialize address book
+ */
+    void
+init (void)
+{
+    GSList *list, *l;
+    ESourceList *source_list;
+    source_list = e_source_list_new_for_gconf_default ("/apps/evolution/addressbook/sources");
+
+    if (source_list == NULL) {
+        return;
+    }
+    list = e_source_list_peek_groups (source_list);
+
+    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) {
+                books = g_slist_prepend (books, book);
+                e_book_open(book, TRUE, NULL);
+            }
+        }
+    }
+
+    g_object_unref (source_list);
+}
+
+    static void
+view_finish (EBookView *book_view, Handler_And_Data *had)
+{
+    SearchAsyncHandler had_handler = had->handler;
+    GList *had_hits = had->hits;
+    gpointer had_user_data = had->user_data;
+    g_free (had);
+
+    g_return_if_fail (book_view != NULL);
+    g_object_unref (book_view);
+
+    had_handler (had_hits, had_user_data);
+}
+
+    static void
+view_contacts_added_cb (EBookView *book_view, GList *contacts, gpointer user_data)
+{
+    
+    GdkPixbuf *photo;
+
+    Handler_And_Data *had = (Handler_And_Data *) user_data;
+    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);
+            return;
+        }
+    }
+    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 = "";
+
+        had->hits = g_list_append (had->hits, hit);
+        had->max_results_remaining--;
+        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;
+        }
+    }
+}
+
+    static void
+view_completed_cb (EBookView *book_view, EBookViewStatus status, gpointer user_data)
+{
+    Handler_And_Data *had = (Handler_And_Data *) user_data;
+    had->book_views_remaining--;
+    if (had->book_views_remaining == 0) {
+        view_finish (book_view, had);
+    }
+}
+
+    void
+search_async (const char         *query,
+        int                 max_results,
+        SearchAsyncHandler  handler,
+        gpointer            user_data)
+{
+    GSList *iter;
+
+    EBookQuery* book_query = create_query (query);
+
+    Handler_And_Data *had = g_new (Handler_And_Data, 1);
+    had->handler = handler;
+    had->user_data = user_data;
+    had->hits = NULL;
+    had->max_results_remaining = max_results;
+    had->book_views_remaining = 0;
+    for (iter = books; iter != NULL; iter = iter->next) {
+        EBook *book = (EBook *) iter->data;
+        EBookView *book_view = NULL;
+        e_book_get_book_view (book, book_query, NULL, max_results, &book_view, NULL);
+        if (book_view != NULL) {
+            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);
+        }
+    }
+    if (had->book_views_remaining == 0) {
+        g_free (had);
+    }
+
+    e_book_query_unref (book_query);
+}
+
+void 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);
+}
diff --git a/sflphone-gtk/src/contactlist/eds.h b/sflphone-gtk/src/contactlist/eds.h
new file mode 100644
index 0000000000000000000000000000000000000000..c0e411dc797f7be5edee7a6f0cfd7be84627b49c
--- /dev/null
+++ b/sflphone-gtk/src/contactlist/eds.h
@@ -0,0 +1,81 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Julien Bonjean <julien.bonjean@savoirfairelinux.com>
+ *
+ *  File originally copied from evolution module of deskbar-applet 2.24.1
+ *   Authors :
+ *    Nigel Tao <nigel.tao@myrealbox.com>
+ *    Raphaël Slinckx <raphael@slinckx.net>
+ *    Mikkel Kamstrup Erlandsen <kamstrup@daimi.au.dk>
+ *    Sebastian Pölsterl <marduk@k-d-w.org>
+ *
+ *  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 __EDS_H__
+#define __EDS_H__
+
+#include <glib/gtypes.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <libebook/e-book.h>
+
+#define EMPTY_ENTRY     "empty"
+
+G_BEGIN_DECLS
+
+/**
+ * Reprsent a contact entry 
+ */
+typedef struct _Hit
+{
+    gchar *name;
+    GdkPixbuf *photo;
+    gchar *phone_business;
+    gchar *phone_home;
+    gchar *phone_mobile;
+} Hit;
+
+/**
+ * Free a contact entry 
+ */
+void free_hit (Hit *h);
+
+/**
+ * Template callback function for the asynchronous search
+ */
+typedef void (* SearchAsyncHandler) (GList *hits, gpointer user_data);
+
+/**
+ * Initialize the address book.
+ * Connection to evolution data server
+ */
+void init (void);
+
+/**
+ * Asynchronous search function
+ */
+void search_async (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);
+
+G_END_DECLS
+
+#endif /* __EDS_H__ */
diff --git a/sflphone-gtk/src/dbus.c b/sflphone-gtk/src/dbus.c
index 428333e55943631d14c7a46afb0a816554c1da3c..45b9285619c32f0b4bdbe6632c08509d5d5dac0c 100644
--- a/sflphone-gtk/src/dbus.c
+++ b/sflphone-gtk/src/dbus.c
@@ -1448,3 +1448,34 @@ void dbus_enable_stun (void)
                 g_error_free(error);
         }
 }
+
+GHashTable* dbus_get_addressbook_settings (void) {
+
+    GError *error = NULL;
+    GHashTable *results = NULL;
+
+    //g_print ("Calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings\n");
+    
+    org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings (configurationManagerProxy, &results, &error);
+    if (error){
+        g_print ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings\n");
+        g_error_free (error);
+    }
+    
+    return results;
+}
+
+void dbus_set_addressbook_settings (GHashTable * settings){
+
+    GError *error = NULL;
+
+    g_print ("Calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings\n");
+    
+    org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings (configurationManagerProxy, settings, &error);
+    if (error){
+        g_print ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings\n");
+        g_error_free (error);
+    }
+}
+
+
diff --git a/sflphone-gtk/src/dbus.h b/sflphone-gtk/src/dbus.h
index f347a4a47e4395900d8b4fb4edb9417e9b82a421..7eac089d8ae3d9768301b2ac134e5cb77e10eb4f 100644
--- a/sflphone-gtk/src/dbus.h
+++ b/sflphone-gtk/src/dbus.h
@@ -446,4 +446,19 @@ void dbus_set_record (const call_t * c);
 void dbus_set_record_path (const gchar *path);
 gchar* dbus_get_record_path (void);
 
+/**
+ * Encapsulate all the address book-related configuration
+ * Get the configuration
+ */
+GHashTable* dbus_get_addressbook_settings (void);
+
+/**
+ * Encapsulate all the address book-related configuration
+ * Set the configuration
+ */
+void dbus_set_addressbook_settings (GHashTable *);
+
+
+
+
 #endif
diff --git a/sflphone-gtk/src/mainwindow.c b/sflphone-gtk/src/mainwindow.c
index 6eaa0c0c723bed27ae928c77d4360422a6da2017..5eb09084712bba75755e6280d47930bcf7e927ad 100644
--- a/sflphone-gtk/src/mainwindow.c
+++ b/sflphone-gtk/src/mainwindow.c
@@ -2,22 +2,22 @@
  *  Copyright (C) 2007 Savoir-Faire Linux inc.
  *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
  *  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.
  */
- 
+
 #include <config.h>
 #include <actions.h>
 #include <calltab.h>
@@ -27,7 +27,7 @@
 #include <mainwindow.h>
 #include <menus.h>
 #include <sliders.h>
-#include <historyfilter.h>
+#include <searchfilter.h>
 #include <assistant.h>
 
 #include <gtk/gtk.h>
@@ -57,7 +57,7 @@ on_delete (GtkWidget * widget UNUSED, gpointer data UNUSED)
 }
 
 /** Ask the user if he wants to hangup current calls */
-gboolean 
+gboolean
 main_window_ask_quit(){
     guint count = call_list_get_size(current_calls);
     GtkWidget * dialog;
@@ -72,7 +72,7 @@ main_window_ask_quit(){
   {
     question = _("There are calls in progress.");
   }
-  
+
   dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW(window) ,
                                   GTK_DIALOG_MODAL,
                                   GTK_MESSAGE_QUESTION,
@@ -81,12 +81,12 @@ main_window_ask_quit(){
                                   question,
                                    _("Do you still want to quit?") );
 
-  
+
   response = gtk_dialog_run (GTK_DIALOG (dialog));
-  
+
   gtk_widget_destroy (dialog);
   if(response == GTK_RESPONSE_YES)
-  { 
+  {
     return TRUE;
   }
   else if(response == GTK_RESPONSE_NO)
@@ -105,7 +105,7 @@ create_main_window ()
   gtk_container_set_border_width (GTK_CONTAINER (window), 0);
   gtk_window_set_title (GTK_WINDOW (window), PACKAGE);
   gtk_window_set_default_size (GTK_WINDOW (window), 258, 320);
-  gtk_window_set_default_icon_from_file (ICONS_DIR "/sflphone.png", 
+  gtk_window_set_default_icon_from_file (ICONS_DIR "/sflphone.png",
                                           NULL);
   gtk_window_set_position( GTK_WINDOW( window ) , GTK_WIN_POS_MOUSE);
 
@@ -123,26 +123,27 @@ create_main_window ()
   vbox = gtk_vbox_new ( FALSE /*homogeneous*/, 0 /*spacing*/);
   subvbox = gtk_vbox_new ( FALSE /*homogeneous*/, 5 /*spacing*/);
   gtk_container_set_border_width (GTK_CONTAINER(subvbox), 5);
-  
+
   widget = create_menus();
   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
-  
+
   widget = create_toolbar();
   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*/);
-  
+
   if( SHOW_SEARCHBAR ){
     filterEntry = create_filter_entry();
     gtk_box_pack_start (GTK_BOX (subvbox), filterEntry, FALSE /*expand*/, TRUE /*fill*/,  0 /*padding*/);
     gtk_widget_show_all ( filterEntry );
   }
 
- if( SHOW_VOLUME ){ 
+ 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);
@@ -151,7 +152,7 @@ create_main_window ()
     gtk_widget_show_all (mic_control);
   }
 
-  if( SHOW_DIALPAD ){ 
+  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);
@@ -167,10 +168,12 @@ create_main_window ()
 
   /* dont't show the history */
   gtk_widget_hide(history->tree);
-  //gtk_widget_show(current_calls->tree);
-  
+
+  /* dont't show the contact list */
+  gtk_widget_hide(contacts->tree);
+
   gtk_tree_view_set_model(GTK_TREE_VIEW(history->view), GTK_TREE_MODEL(histfilter));
-  // Configuration wizard 
+  // Configuration wizard
   if (account_list_get_size() == 0)
   {
 #if GTK_CHECK_VERSION(2,10,0)
@@ -194,13 +197,13 @@ create_main_window ()
   }
 }
 
-GtkAccelGroup * 
+GtkAccelGroup *
 get_accel_group()
 {
   return accelGroup;
 }
 
-GtkWidget * 
+GtkWidget *
 get_main_window()
 {
   return window;
@@ -215,7 +218,7 @@ main_window_message(GtkMessageType type, gchar * markup){
                                       "%s\n",
                                       markup);
   gtk_dialog_run (GTK_DIALOG(dialog));
-  
+
   gtk_widget_destroy (GTK_WIDGET(dialog));
 }
 
@@ -286,15 +289,15 @@ main_window_searchbar( gboolean *state ){
   }
 }
 
-void 
+void
 statusbar_push_message(const gchar * message, guint id)
-{ 
+{
   gtk_statusbar_push(GTK_STATUSBAR(statusBar), id, message);
 }
 
-void 
+void
 statusbar_pop_message(guint id)
-{ 
+{
   gtk_statusbar_pop(GTK_STATUSBAR(statusBar), id);
 }
 
diff --git a/sflphone-gtk/src/menus.c b/sflphone-gtk/src/menus.c
index c0a21e40f1238f66570060ba8f3a51c9d43c714a..2030f12ccef32560ea4b0d72b016d80b6eeca1fa 100644
--- a/sflphone-gtk/src/menus.c
+++ b/sflphone-gtk/src/menus.c
@@ -251,22 +251,23 @@ remove_from_history( void * foo UNUSED)
 static void
 call_back( void * foo UNUSED)
 {
-  call_t* selectedCall = call_get_selected( history );
-  call_t* newCall =  g_new0 (call_t, 1);
-  if( selectedCall )
-  {
-    newCall->to = g_strdup(call_get_number(selectedCall));
-    newCall->from = g_strconcat("\"\" <", call_get_number(selectedCall), ">",NULL);
-    newCall->state = CALL_STATE_DIALING;
-    newCall->callID = g_new0(gchar, 30);
-    g_sprintf(newCall->callID, "%d", rand()); 
-    newCall->_start = 0;
-    newCall->_stop = 0;
-    call_list_add(current_calls, newCall);
-    update_call_tree_add(current_calls, newCall);
-    sflphone_place_call(newCall);
-    switch_tab();
-  } 
+    call_t *selected_call, *new_call;
+    gchar *to, *from;
+
+    selected_call = call_get_selected( active_calltree );
+
+    if( selected_call )
+    {
+        to = g_strdup(call_get_number(selected_call));
+        from = g_strconcat("\"\" <", call_get_number(selected_call), ">",NULL);
+
+        create_new_call (to, from, CALL_STATE_DIALING, "", &new_call);
+
+        call_list_add(current_calls, new_call);
+        update_call_tree_add(current_calls, new_call);
+        sflphone_place_call(new_call);
+        display_calltree (current_calls);
+    }
 }
     
   GtkWidget * 
diff --git a/sflphone-gtk/src/searchfilter.c b/sflphone-gtk/src/searchfilter.c
new file mode 100644
index 0000000000000000000000000000000000000000..8cc99aba8bb27ced019d15fc4030cb07da94540c
--- /dev/null
+++ b/sflphone-gtk/src/searchfilter.c
@@ -0,0 +1,152 @@
+/*
+ *  Copyright (C) 2008 2009 Savoir-Faire Linux inc.
+ *
+ *  Author: Antoine Reversat <antoine.reversat@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.
+ */
+
+#include <string.h>
+
+#include <searchfilter.h>
+#include <calltree.h>
+#include <contactlist/eds.h>
+#include "addressbook-config.h"
+
+static void handler_async_search (GList *hits, gpointer user_data UNUSED);
+
+GtkTreeModel* create_filter (GtkTreeModel* child) {
+
+    GtkTreeModel* ret;
+    
+    ret = gtk_tree_model_filter_new(child, NULL);
+    gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(ret), is_visible, NULL, NULL);
+    return GTK_TREE_MODEL(ret);
+
+}
+
+gboolean is_visible (GtkTreeModel* model, GtkTreeIter* iter, gpointer data UNUSED) {
+
+    if( SHOW_SEARCHBAR )
+    {
+        GValue val;
+
+        gchar* text = NULL;
+        gchar* search = (gchar*)gtk_entry_get_text(GTK_ENTRY(filter_entry));
+        memset (&val, 0, sizeof(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);
+        }
+        if(text != NULL && g_ascii_strncasecmp(search, _("Search"), 6) != 0){
+            return g_regex_match_simple(search, text, G_REGEX_CASELESS, 0);
+        }
+        g_value_unset (&val);
+        return TRUE;
+    }
+    return TRUE;
+
+}
+
+static void handler_async_search (GList *hits, gpointer user_data) {
+
+    GList *i;
+    GdkPixbuf *photo = NULL;
+    AddressBook_Config *addressbook_config;
+    call_t *j;
+
+    // freeing calls
+    while((j = (call_t *)g_queue_pop_tail (contacts->callQueue)) != NULL)
+    {
+        free_call_t(j);
+    }
+
+    // Retrieve the address book parameters
+    addressbook_config = (AddressBook_Config*) user_data;
+        
+    // reset previous results
+    reset_call_tree(contacts);
+    call_list_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))
+                create_new_entry_in_contactlist (entry->name, entry->phone_business, CONTACT_PHONE_BUSINESS, photo);
+            /* Create entry for home phone information */
+            if (addressbook_display (addressbook_config, ADDRESSBOOK_DISPLAY_PHONE_HOME))
+                create_new_entry_in_contactlist (entry->name, entry->phone_home, CONTACT_PHONE_HOME, photo);
+            /* Create entry for mobile phone information */
+            if (addressbook_display (addressbook_config, ADDRESSBOOK_DISPLAY_PHONE_MOBILE))
+                create_new_entry_in_contactlist (entry->name, entry->phone_mobile, CONTACT_PHONE_MOBILE, photo);
+        }
+        free_hit(entry);
+    }
+    g_list_free(hits);
+
+}
+
+void filter_entry_changed (GtkEntry* entry UNUSED, gchar* arg1 UNUSED, gpointer data UNUSED) {
+
+    AddressBook_Config *addressbook_config;
+    
+    /* Switch to the address book when the focus is on the search bar */
+    if (active_calltree == current_calls)
+        display_calltree (contacts);
+
+
+    /* We want to search in the contact list */
+    if (active_calltree == contacts) {
+        // Load the address book parameters
+        addressbook_load_parameters (&addressbook_config);
+        // Start the asynchronous search as soon as we have an entry */ 
+        search_async (gtk_entry_get_text (GTK_ENTRY (filter_entry)), addressbook_config->max_results, &handler_async_search, addressbook_config); 
+    }
+
+}
+
+void clear_filter_entry_if_default (GtkWidget* widget UNUSED, gpointer user_data UNUSED) {
+
+    if(g_ascii_strncasecmp(gtk_entry_get_text(GTK_ENTRY(filter_entry)), _("Search"), 6) == 0)
+        gtk_entry_set_text(GTK_ENTRY(filter_entry), "");
+
+}
+
+GtkWidget* create_filter_entry() {
+
+    GtkWidget* image;
+    GtkWidget* ret = gtk_hbox_new(FALSE, 0);
+
+    filter_entry = sexy_icon_entry_new();
+    //filter_entry = gtk_entry_new();
+    image = gtk_image_new_from_stock( GTK_STOCK_FIND , GTK_ICON_SIZE_SMALL_TOOLBAR);
+    sexy_icon_entry_set_icon( SEXY_ICON_ENTRY(filter_entry), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) );
+    sexy_icon_entry_add_clear_button( SEXY_ICON_ENTRY(filter_entry) );
+    gtk_entry_set_text(GTK_ENTRY(filter_entry), _("Search"));
+    g_signal_connect(GTK_ENTRY(filter_entry), "changed", G_CALLBACK(filter_entry_changed), NULL);
+    g_signal_connect(GTK_ENTRY(filter_entry), "grab-focus", G_CALLBACK(clear_filter_entry_if_default), NULL);
+
+    gtk_box_pack_start(GTK_BOX(ret), filter_entry, TRUE, TRUE, 0);
+    return ret;
+
+}
diff --git a/sflphone-gtk/src/searchfilter.h b/sflphone-gtk/src/searchfilter.h
new file mode 100644
index 0000000000000000000000000000000000000000..6a85eda4ae7b3b3af7bd6792dce7c0cd0a20d61b
--- /dev/null
+++ b/sflphone-gtk/src/searchfilter.h
@@ -0,0 +1,35 @@
+/*
+ *  Copyright (C) 2008 2009 Savoir-Faire Linux inc.
+ *
+ *  Author: Antoine Reversat <antoine.reversat@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.
+ */
+ 
+#ifndef __SEARCH_FILTER_H__
+#define __SEARCH_FILTER_H__
+
+#include <calllist.h>
+#include <gtk/gtk.h>
+#include <libsexy/sexy-icon-entry.h>
+
+GtkTreeModel* create_filter(GtkTreeModel* child);
+
+gboolean is_visible(GtkTreeModel* model, GtkTreeIter* iter, gpointer data);
+
+GtkWidget* create_filter_entry();
+
+#endif
diff --git a/sflphone-gtk/src/sflphone_const.h b/sflphone-gtk/src/sflphone_const.h
index cdd85602d928af95a22ee93580ab8be0885a96db..71f67fa2ec94795951c9e4d04d5eaa3fdedfac1f 100644
--- a/sflphone-gtk/src/sflphone_const.h
+++ b/sflphone-gtk/src/sflphone_const.h
@@ -94,4 +94,5 @@
 /** Desktop notifications - Time before to close the notification*/
 #define __TIMEOUT_TIME      18000       // 30 secondes
 
+
 #endif
diff --git a/src/Makefile.am b/src/Makefile.am
index 7af7dbfec2d5350a0c1b9aa2d9cc6cfa4ec44835..62b16508816ef09325ff14cbc183059016e7c9b7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -25,7 +25,7 @@ sflphoned_SOURCES = \
 		eventthread.cpp \
 		sipaccount.cpp \
 		accountcreator.cpp \
-        sipvoiplink.cpp \
+                sipvoiplink.cpp \
 		call.cpp \
 		account.cpp \
 		sipcall.cpp \
@@ -33,6 +33,7 @@ sflphoned_SOURCES = \
 		sdpmedia.cpp \
 		$(IAXSOURCES) 
 
+
 sflphoned_CXXFLAGS = \
 		-DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" \
 		$(IAX_FLAGS)
@@ -49,9 +50,11 @@ sflphoned_LDADD = \
 		@CCRTP_LIBS@ \
 		@ALSA_LIBS@ \
 		@PULSEAUDIO_LIBS@ \
-		@SAMPLERATE_LIBS@ 
+		@SAMPLERATE_LIBS@ \
+		@LIBOPENSSL_LIBS@
 
-#sflphoned_LDFLAGS=-pg
+# sflphoned_LDFLAGS= -pg -luuid
+sflphoned_LDFLAGS= -luuid
 
 noinst_LTLIBRARIES = libsflphone.la
 
@@ -72,10 +75,10 @@ noinst_HEADERS = \
 		sipcall.h \
 		sdp.h \
 		sdpmedia.h
-		
+
 libsflphone_la_LIBADD = \
 	$(src)/libs/stund/libstun.la \
-    	$(src)/libs/utilspp/libutilspp.la \
+	$(src)/libs/utilspp/libutilspp.la \
 	./audio/libaudio.la \
 	./dbus/libdbus.la \
 	./config/libconfig.la \
diff --git a/src/audio/audiostream.cpp b/src/audio/audiostream.cpp
index c031b4ac0d4a5119a7444736eb26a417d21d869f..01a56c974a63f160cb7cb1f8db1ebf3bd33c0690 100644
--- a/src/audio/audiostream.cpp
+++ b/src/audio/audiostream.cpp
@@ -66,7 +66,7 @@ AudioStream::stream_state_callback( pa_stream* s, void* user_data UNUSED )
     case PA_STREAM_READY:
  
      _debug("Stream successfully created, connected to %s\n", pa_stream_get_device_name( s ));
-      pa_stream_cork( s, 0, NULL, NULL);
+     // pa_stream_cork( s, 0, NULL, NULL);
       break;
     case PA_STREAM_UNCONNECTED:
       _debug("Stream unconnected\n");
@@ -102,9 +102,8 @@ AudioStream::createStream( pa_context* c )
     attributes->tlength = 10000;
     attributes->prebuf = 10000;
     attributes->minreq = 940;
-    pa_stream_connect_playback( s , NULL , attributes, 
-				PA_STREAM_START_CORKED,
-				&_volume, NULL);
+    // pa_stream_connect_playback( s , NULL , attributes, PA_STREAM_INTERPOLATE_TIMING, &_volume, NULL);
+    pa_stream_connect_playback( s , NULL , attributes, PA_STREAM_START_CORKED, &_volume, NULL);
   }
   else if( _streamType == CAPTURE_STREAM ){
     
@@ -112,6 +111,7 @@ AudioStream::createStream( pa_context* c )
     attributes->fragsize = (uint32_t)-1;   
  
     pa_stream_connect_record( s , NULL , attributes , PA_STREAM_START_CORKED );
+    // pa_stream_connect_record( s , NULL , attributes , PA_STREAM_INTERPOLATE_TIMING );
   }
   else if( _streamType == UPLOAD_STREAM ){
     pa_stream_connect_upload( s , 1024  );
diff --git a/src/audio/pulselayer.cpp b/src/audio/pulselayer.cpp
index 8101e5e23839497707a618fe7f7afd1c08c533a2..6367de5248cf0a467ab168ff206fcacb55442e60 100644
--- a/src/audio/pulselayer.cpp
+++ b/src/audio/pulselayer.cpp
@@ -37,7 +37,7 @@ static  void audioCallback ( pa_stream* s, size_t bytes, void* userdata )
     , context(NULL)
     , m(NULL)
     , playback()
-      , record()
+    , record()
 {
     PulseLayer::streamState = 0;
     _debug("PulseLayer::Pulse audio constructor: Create context\n");
@@ -155,7 +155,7 @@ void PulseLayer::createStreams( pa_context* c )
 
 bool PulseLayer::openDevice(int indexIn UNUSED, int indexOut UNUSED, int sampleRate, int frameSize , int stream UNUSED, std::string plugin UNUSED) 
 {
-  _debug("PulseLayer::openDevice \n");
+    _debug("PulseLayer::openDevice \n");
     _sampleRate = sampleRate;
     _frameSize = frameSize;	
 
@@ -174,7 +174,7 @@ bool PulseLayer::openDevice(int indexIn UNUSED, int indexOut UNUSED, int sampleR
 
     connectPulseAudioServer();
  
-    startStream();
+    // startStream();
 
     _debug("Connection Done!! \n");
     return true;
@@ -222,15 +222,16 @@ void PulseLayer::startStream (void)
 PulseLayer::stopStream (void) 
 {
     _debug("PulseLayer::Stop stream\n");
-    pa_stream_flush( playback->pulseStream(), NULL, NULL );
-    pa_stream_flush( record->pulseStream(), NULL, NULL );
+     pa_stream_flush( playback->pulseStream(), NULL, NULL );
+     pa_stream_flush( record->pulseStream(), NULL, NULL );
     
-    pa_stream_cork( playback->pulseStream(), 1, NULL, NULL);
-    pa_stream_cork( record->pulseStream(), 1, NULL, NULL);
     
     flushMic();
     flushMain();
     flushUrgent();
+
+    pa_stream_cork( playback->pulseStream(), 1, NULL, NULL);
+    pa_stream_cork( record->pulseStream(), 1, NULL, NULL); 
 }
 
 
@@ -255,6 +256,7 @@ void PulseLayer::stream_suspended_callback(pa_stream *s, void *userdata UNUSED )
 
 void PulseLayer::processData( void )
 {
+  
 
         // Handle the mic
         // We check if the stream is ready
diff --git a/src/call.cpp b/src/call.cpp
index b1625d346e3bc726bb6c48c66cf91a49e1323ad5..45ee195eee3aa6bfb5a32c6410e70983c166db05 100644
--- a/src/call.cpp
+++ b/src/call.cpp
@@ -30,6 +30,7 @@ Call::Call(const CallID& id, Call::CallType type)
            , _type(type) 
            , _connectionState(Call::Disconnected)
            , _callState(Call::Inactive)
+           , _callConfig (Call::Classic)
            , _peerName()
            , _peerNumber()
 {
diff --git a/src/call.h b/src/call.h
index d82ff7ba583c2253571532ddcd7f80561cf3aad2..836ee3daa6cf444ee65e1531d9f5ac6d8a7d89a8 100644
--- a/src/call.h
+++ b/src/call.h
@@ -1,5 +1,6 @@
 /*
- *  Copyright (C) 2004-2006 Savoir-Faire Linux inc.
+ *  Copyright (C) 2004-2009 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
  *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
  *  Author : Laurielle Lea <laurielle.lea@savoirfairelinux.com>
  *
@@ -25,6 +26,9 @@
 
 #include "plug-in/audiorecorder/audiorecord.h"
 
+#define IP_TO_IP_PATTERN       "ip:"
+
+#define CallConfigNULL          NULL
 /* 
  * @file call.h 
  * @brief A call is the base class for protocol-based calls
@@ -35,219 +39,232 @@ typedef std::string CallID;
 class AudioRecord;
 
 class Call{
-  public:
-    /**
-     * This determines if the call originated from the local user (Outgoing)
-     * or from some remote peer (Incoming).
-     */
-    enum CallType {Incoming, Outgoing};
-
-    /**
-     * Tell where we're at with the call. The call gets Connected when we know
-     * from the other end what happened with out call. A call can be 'Connected'
-     * even if the call state is Busy, Refused, or Error.
-     *
-     * Audio should be transmitted when ConnectionState = Connected AND
-     * CallState = Active.
-     */
-    enum ConnectionState {Disconnected, Trying, Progressing, Ringing, Connected};
-
-    /**
-     * The Call State.
-     */
-    enum CallState {Inactive, Active, Hold, Busy, Refused, Error};
-
-    /**
-     * Constructor of a call
-     * @param id Unique identifier of the call
-     * @param type set definitely this call as incoming/outgoing
-     */
-    Call(const CallID& id, Call::CallType type);
-    virtual ~Call();
-
-    /** 
-     * Return a reference on the call id
-     * @return call id
-     */
-    CallID& getCallId() {return _id; }
-
-    /** 
-     * 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; }
-
-    /** 
-     * 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; }
-
-    /** 
-     * Set the peer name (caller in ingoing)
-     * not protected by mutex (when created)
-     * @param name The peer name
-     */
-    void setPeerName(const std::string& name) {  _peerName = name; }
-
-    /** 
-     * Get the peer name (caller in ingoing)
-     * not protected by mutex (when created)
-     * @return std::string The peer name
-     */
-    const std::string& getPeerName() {  return _peerName; }
-
-    /**
-     * Tell if the call is incoming
-     * @return true if yes
-     *	      false otherwise
-     */
-    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);
-    
-    /** 
-     * Get the connection state of the call (protected by mutex)
-     * @return ConnectionState The connection state
-     */
-    ConnectionState getConnectionState();
-
-    /**
-     * Set the state of the call (protected by mutex)
-     * @param state The call state
-     */
-    void setState(CallState state);
-
-    /** 
-     * Get the call state of the call (protected by mutex)
-     * @return CallState  The call state
-     */
-    CallState getState();
-
-    /**
-     * Set the audio start boolean (protected by mutex)
-     * @param start true if we start the audio
-     *		    false otherwise
-     */
-    void setAudioStart(bool start);
-
-    /**
-     * Tell if the audio is started (protected by mutex)
-     * @return true if it's already started
-     *	      false otherwise
-     */
-    bool isAudioStarted();
+    public:
+
+        /**
+         * This determines if the call is a direct IP-to-IP call or a classic call, made with an existing account
+         */
+        enum CallConfiguration {Classic, IPtoIP};
+
+        /**
+         * This determines if the call originated from the local user (Outgoing)
+         * or from some remote peer (Incoming).
+         */
+        enum CallType {Incoming, Outgoing};
+
+        /**
+         * Tell where we're at with the call. The call gets Connected when we know
+         * from the other end what happened with out call. A call can be 'Connected'
+         * even if the call state is Busy, Refused, or Error.
+         *
+         * Audio should be transmitted when ConnectionState = Connected AND
+         * CallState = Active.
+         */
+        enum ConnectionState {Disconnected, Trying, Progressing, Ringing, Connected};
+
+        /**
+         * The Call State.
+         */
+        enum CallState {Inactive, Active, Hold, Busy, Refused, Error};
+
+        /**
+         * Constructor of a call
+         * @param id Unique identifier of the call
+         * @param type set definitely this call as incoming/outgoing
+         */
+        Call(const CallID& id, Call::CallType type);
+        virtual ~Call();
+
+        /** 
+         * Return a reference on the call id
+         * @return call id
+         */
+        CallID& getCallId() {return _id; }
+
+        /** 
+         * 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; }
+
+        /** 
+         * 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; }
+
+        /** 
+         * Set the peer name (caller in ingoing)
+         * not protected by mutex (when created)
+         * @param name The peer name
+         */
+        void setPeerName(const std::string& name) {  _peerName = name; }
+
+        /** 
+         * Get the peer name (caller in ingoing)
+         * not protected by mutex (when created)
+         * @return std::string The peer name
+         */
+        const std::string& getPeerName() {  return _peerName; }
+
+        /**
+         * Tell if the call is incoming
+         * @return true if yes
+         *	      false otherwise
+         */
+        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);
+
+        /** 
+         * Get the connection state of the call (protected by mutex)
+         * @return ConnectionState The connection state
+         */
+        ConnectionState getConnectionState();
+
+        /**
+         * Set the state of the call (protected by mutex)
+         * @param state The call state
+         */
+        void setState(CallState state);
+
+        /** 
+         * Get the call state of the call (protected by mutex)
+         * @return CallState  The call state
+         */
+        CallState getState();
+
+        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);
+
+        /**
+         * Tell if the audio is started (protected by mutex)
+         * @return true if it's already started
+         *	      false otherwise
+         */
+        bool isAudioStarted();
+
+        /** 
+         * Set my IP [not protected] 
+         * @param ip  The local IP address
+         */
+        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;}
+
+        /** 
+         * Set the audio port that remote will see.
+         * @param port  The external audio port
+         */
+        void setLocalExternAudioPort(unsigned int port) { _localExternalAudioPort = port; }
 
         /** 
-     * Set my IP [not protected] 
-     * @param ip  The local IP address
-     */
-    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;}
-
-    /** 
-     * Set the audio port that remote will see.
-     * @param port  The external audio port
-     */
-    void setLocalExternAudioPort(unsigned int port) { _localExternalAudioPort = port; }
-
-    /** 
-     * Return the audio port seen by the remote side. 
-     * @return unsigned int The external audio port
-    */
-    unsigned int getLocalExternAudioPort() { return _localExternalAudioPort; }
-
-    /** 
-     * 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 unsigned int  The local audio port
-     */
-    unsigned int getLocalAudioPort();
-
-    /**
-     * @return Return the file name for this call
-     */
-    std::string getFileName() {return _filename;}
-
-    /**
-     * A recorder for this call
-     */
-    AudioRecord recAudio;
-  
-    /**
-     * SetRecording
-     */
-    void setRecording();
-
-    /**
-     * stopRecording, make sure the recording is stopped (whe transfering call)
-     */
-    void stopRecording();
-    
-    /**
-     * Return Recording state
-     */
-    bool isRecording(); 
-
-    /**
-     *
-     */
-    void initRecFileName();
-
-  protected:
-    /** Protect every attribute that can be changed by two threads */
-    ost::Mutex _callMutex;
-
-    bool _audioStarted;
-
-    // Informations about call socket / audio
-
-    /** My IP address */
-    std::string  _localIPAddress;
-
-    /** Local audio port, as seen by me. */
-    unsigned int _localAudioPort;
-
-    /** Port assigned to my machine by the NAT, as seen by remote peer (he connects there) */
-    unsigned int _localExternalAudioPort;
-
-    
-  private:  
-  
-    /** Unique ID of the call */
-    CallID _id;
-
-    /** Type of the call */
-    CallType _type;
-    /** Disconnected/Progressing/Trying/Ringing/Connected */
-    ConnectionState _connectionState;
-    /** Inactive/Active/Hold/Busy/Refused/Error */
-    CallState _callState;
-
-    /** Name of the peer */
-    std::string _peerName;
-
-    /** Number of the peer */
-    std::string _peerNumber;
-
-    /** File name for his call : time YY-MM-DD */
-    std::string _filename;
+         * Return the audio port seen by the remote side. 
+         * @return unsigned int The external audio port
+         */
+        unsigned int getLocalExternAudioPort() { return _localExternalAudioPort; }
+
+        /** 
+         * 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 unsigned int  The local audio port
+         */
+        unsigned int getLocalAudioPort();
+
+        /**
+         * @return Return the file name for this call
+         */
+        std::string getFileName() {return _filename;}
+
+        /**
+         * A recorder for this call
+         */
+        AudioRecord recAudio;
+
+        /**
+         * SetRecording
+         */
+        void setRecording();
+
+        /**
+         * stopRecording, make sure the recording is stopped (whe transfering call)
+         */
+        void stopRecording();
+
+        /**
+         * Return Recording state
+         */
+        bool isRecording(); 
+
+        /**
+         *
+         */
+        void initRecFileName();
+
+    protected:
+        /** Protect every attribute that can be changed by two threads */
+        ost::Mutex _callMutex;
+
+        bool _audioStarted;
+
+        // Informations about call socket / audio
+
+        /** My IP address */
+        std::string  _localIPAddress;
+
+        /** Local audio port, as seen by me. */
+        unsigned int _localAudioPort;
+
+        /** Port assigned to my machine by the NAT, as seen by remote peer (he connects there) */
+        unsigned int _localExternalAudioPort;
+
+
+    private:  
+
+        /** Unique ID of the call */
+        CallID _id;
+
+        /** Type of the call */
+        CallType _type;
+        /** Disconnected/Progressing/Trying/Ringing/Connected */
+        ConnectionState _connectionState;
+        /** Inactive/Active/Hold/Busy/Refused/Error */
+        CallState _callState;
+
+        /** Direct IP-to-IP or classic call */
+        CallConfiguration _callConfig;
+
+        /** Name of the peer */
+        std::string _peerName;
+
+        /** Number of the peer */
+        std::string _peerNumber;
+
+        /** File name for his call : time YY-MM-DD */
+        std::string _filename;
 };
 
 #endif
diff --git a/src/dbus/configurationmanager-glue.h b/src/dbus/configurationmanager-glue.h
index 8a69473ca12dadccbdd9f9a2db4dd03d9c7d8a7e..3c9eacbf7a2558bafadec844bb1056c7939a9211 100644
--- a/src/dbus/configurationmanager-glue.h
+++ b/src/dbus/configurationmanager-glue.h
@@ -79,6 +79,8 @@ public:
         register_method(ConfigurationManager_adaptor, getStunServer, _getStunServer_stub);
         register_method(ConfigurationManager_adaptor, enableStun, _enableStun_stub);
         register_method(ConfigurationManager_adaptor, isStunEnabled, _isStunEnabled_stub);
+        register_method(ConfigurationManager_adaptor, getAddressbookSettings, _getAddressbookSettings_stub);
+        register_method(ConfigurationManager_adaptor, setAddressbookSettings, _setAddressbookSettings_stub);
     }
 
     ::DBus::IntrospectedInterface *const introspect() const 
@@ -373,6 +375,16 @@ public:
             { "state", "i", false },
             { 0, 0, 0 }
         };
+        static ::DBus::IntrospectedArgument getAddressbookSettings_args[] = 
+        {
+            { "settings", "a{si}", false },
+            { 0, 0, 0 }
+        };
+        static ::DBus::IntrospectedArgument setAddressbookSettings_args[] = 
+        {
+            { "settings", "a{si}", true },
+            { 0, 0, 0 }
+        };
         static ::DBus::IntrospectedArgument parametersChanged_args[] = 
         {
             { "list", "a{ss}", false },
@@ -448,6 +460,8 @@ public:
             { "getStunServer", getStunServer_args },
             { "enableStun", enableStun_args },
             { "isStunEnabled", isStunEnabled_args },
+            { "getAddressbookSettings", getAddressbookSettings_args },
+            { "setAddressbookSettings", setAddressbookSettings_args },
             { 0, 0 }
         };
         static ::DBus::IntrospectedMethod ConfigurationManager_adaptor_signals[] = 
@@ -541,6 +555,8 @@ public:
     virtual std::string getStunServer() = 0;
     virtual void enableStun() = 0;
     virtual int32_t isStunEnabled() = 0;
+    virtual std::map< std::string, int32_t > getAddressbookSettings() = 0;
+    virtual void setAddressbookSettings(const std::map< std::string, int32_t >& settings) = 0;
 
 public:
 
@@ -1130,6 +1146,25 @@ private:
         wi << argout1;
         return reply;
     }
+    ::DBus::Message _getAddressbookSettings_stub(const ::DBus::CallMessage &call)
+    {
+        ::DBus::MessageIter ri = call.reader();
+
+        std::map< std::string, int32_t > argout1 = getAddressbookSettings();
+        ::DBus::ReturnMessage reply(call);
+        ::DBus::MessageIter wi = reply.writer();
+        wi << argout1;
+        return reply;
+    }
+    ::DBus::Message _setAddressbookSettings_stub(const ::DBus::CallMessage &call)
+    {
+        ::DBus::MessageIter ri = call.reader();
+
+        std::map< std::string, int32_t > argin1; ri >> argin1;
+        setAddressbookSettings(argin1);
+        ::DBus::ReturnMessage reply(call);
+        return reply;
+    }
 };
 
 } } } 
diff --git a/src/dbus/configurationmanager-introspec.xml b/src/dbus/configurationmanager-introspec.xml
index 01c91654cd3c1c10ad888b23af38a15b0376fb55..6f897c2c2a0fd1082fa27fd4534bc3ac34f3c45c 100644
--- a/src/dbus/configurationmanager-introspec.xml
+++ b/src/dbus/configurationmanager-introspec.xml
@@ -242,6 +242,15 @@
       <arg type="i" name="state" direction="out"/>
     </method>
 
+    <!-- Addressbook configuration -->
+    <method name="getAddressbookSettings">
+      <arg type="a{si}" name="settings" direction="out"/>
+    </method>
+
+    <method name="setAddressbookSettings">
+      <arg type="a{si}" name="settings" direction="in"/>
+    </method>
+
   <!--        /////////////////////////////       -->
     <signal name="parametersChanged">
       <arg type="a{ss}" name="list" direction="out"/>
diff --git a/src/dbus/configurationmanager.cpp b/src/dbus/configurationmanager.cpp
index e2caf05e47f3633afbea0e167579ee5b4cbf4ebd..ac26ec4a42491e654ec61ef4e14c1aad2a207382 100644
--- a/src/dbus/configurationmanager.cpp
+++ b/src/dbus/configurationmanager.cpp
@@ -425,3 +425,11 @@ int32_t ConfigurationManager::isStunEnabled (void)
 {
     return Manager::instance().isStunEnabled();
 }
+
+std::map<std::string, int32_t> ConfigurationManager::getAddressbookSettings (void) {
+    return Manager::instance().getAddressbookSettings ();
+}
+
+void ConfigurationManager::setAddressbookSettings (const std::map<std::string, int32_t>& settings) {
+    Manager::instance().setAddressbookSettings (settings);
+}
diff --git a/src/dbus/configurationmanager.h b/src/dbus/configurationmanager.h
index 6d5c87dacfc0d7edeed34d03d0b020c41495e320..ebbc728d1d99807b4f7d106f2fd8033af4d3d6d6 100644
--- a/src/dbus/configurationmanager.h
+++ b/src/dbus/configurationmanager.h
@@ -104,6 +104,9 @@ public:
     void enableStun (void);
     int32_t isStunEnabled (void);
 
+    std::map<std::string, int32_t> getAddressbookSettings (void);
+    void setAddressbookSettings (const std::map<std::string, int32_t>& settings);
+
 };
 
 
diff --git a/src/iaxvoiplink.cpp b/src/iaxvoiplink.cpp
index 79466dc5028ab6093d3c3565d0d2ed8818162977..af965c32a460679ae66af53c6e763fbe12b494f3 100644
--- a/src/iaxvoiplink.cpp
+++ b/src/iaxvoiplink.cpp
@@ -218,8 +218,7 @@ IAXVoIPLink::getEvent()
 
    
     if(call){
-      // _debug("Are we recording");
-        call->recAudio.recData(spkrDataConverted,micData,nbSampleForRec_,nbSampleForRec_);
+      call->recAudio.recData(spkrDataConverted,micData,nbSampleForRec_,nbSampleForRec_);
     }
 
     // Do the doodle-moodle to send audio from the microphone to the IAX channel.
@@ -230,7 +229,6 @@ IAXVoIPLink::getEvent()
         sendRegister("");
     }
   
-    // _debug("IAXVoIPLink::getEvent() \n");
     // reinitialize speaker buffer for recording (when recording a voice mail)
     for (int i = 0; i < nbSampleForRec_; i++)
         spkrDataConverted[i] = 0;
diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp
index 4ad23121b347059f92cc050def291349b38f7c52..3978225bdb8368d6de6884f9a031218109bb1257 100644
--- a/src/managerimpl.cpp
+++ b/src/managerimpl.cpp
@@ -80,6 +80,7 @@ ManagerImpl::ManagerImpl (void)
         , _hasZeroconf(false)
         , _callAccountMap()
         , _callAccountMapMutex()
+        , _callConfigMap()
         , _accountMap()
 {
   
@@ -188,13 +189,35 @@ ManagerImpl::switchCall(const CallID& id ) {
 // Management of events' IP-phone user
 ///////////////////////////////////////////////////////////////////////////////
 /* Main Thread */ 
+
   bool
 ManagerImpl::outgoingCall(const std::string& accountid, const CallID& id, const std::string& to)
 {
+    std::string pattern;
+    Call::CallConfiguration callConfig;
+    SIPVoIPLink *siplink;
+    
     _debug("ManagerImpl::outgoingCall() method \n");
 
-    stopTone(false);
-    playTone();
+    // stopTone(false);
+    // playTone();
+
+    /* Check what kind of call we are dealing with */
+    check_call_configuration (id, to, &callConfig);
+    
+    if (callConfig == Call::IPtoIP) {
+        _debug ("Start IP to IP call\n");
+        /* We need to retrieve the sip voiplink instance */
+        siplink = SIPVoIPLink::instance("");     
+        if (siplink->new_ip_to_ip_call (id, to)) {
+            switchCall (id);
+            return true;
+        }
+        else {
+            callFailure (id);
+        }
+        return false;
+    } 
 
     if (!accountExists(accountid)) {
         _debug("! Manager Error: Outgoing Call: account doesn't exist\n");
@@ -236,27 +259,13 @@ ManagerImpl::answerCall(const CallID& id)
   if (currentcall->getState() == 1)
       isActive = true;
 
-  stopTone(false); 
+  // stopTone(false); 
   _debug("Try to answer call: %s\n", id.data());
   AccountID accountid = getAccountFromCall( id );
   if (accountid == AccountNULL) {
     _debug("Answering Call: Call doesn't exists\n");
     return false;
   }
-
-  /*
-  _debug("_nbIncomingWaitingCall =======>>>>>>>> %i \n",_nbIncomingWaitingCall);
-  
-  CallIDSet::iterator iter = _waitingCall.begin();
-  while (iter != _waitingCall.end()) {
-      CallID ident = *iter;
-      AccountID acc = getAccountFromCall( ident );
-      Call* call = getAccountLink(acc)->getCall(ident);
-      _debug("ManagerImpl::answerCall :: incoming call ident: %s \n",ident.c_str());
-      _debug("ManagerImpl::answerCall :: incoming call state: %i \n",call->getState());
-      ++iter;
-  }
-  */
   
   //  if (id != getCurrentCallId()) {
   if (isActive) { 
@@ -278,7 +287,7 @@ ManagerImpl::answerCall(const CallID& id)
   switchCall(id);
  
   std::string codecName = getCurrentCodecName(id);
-  _debug("ManagerImpl::hangupCall(): broadcast codec name %s \n",codecName.c_str());
+  // _debug("ManagerImpl::hangupCall(): broadcast codec name %s \n",codecName.c_str());
   if (_dbus) _dbus->getCallManager()->currentSelectedCodec(id,codecName.c_str());
 
   return true;
@@ -297,19 +306,23 @@ ManagerImpl::hangupCall(const CallID& id)
 
     /* Broadcast a signal over DBus */
     if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HUNGUP");
-  
-    accountid = getAccountFromCall( id );
-    if (accountid == AccountNULL) {
-        /** @todo We should tell the GUI that the call doesn't exist, so
-        * it clears up. This can happen. */
-        _debug("! Manager Hangup Call: Call doesn't exists\n");
-        return false;
+    
+    /* Direct IP to IP call */
+    if (getConfigFromCall (id) == Call::IPtoIP) {
+        returnValue = SIPVoIPLink::instance (AccountNULL)->hangup (id);        
     }
 
-    returnValue = getAccountLink(accountid)->hangup(id);
+    /* Classic call, attached to an account */
+    else { 
+        accountid = getAccountFromCall( id );
+        if (accountid == AccountNULL) {
+            _debug("! Manager Hangup Call: Call doesn't exists\n");
+            return false;
+        }
+        returnValue = getAccountLink(accountid)->hangup(id);
+        removeCallAccount(id);
+    }
 
-    _debug("After voip link hungup!\n");
-    removeCallAccount(id);
     switchCall("");
 
     if( _audiodriver->getLayerType() == PULSEAUDIO && getConfigInt( PREFERENCES , CONFIG_PA_VOLUME_CTRL ) ) {
@@ -324,43 +337,64 @@ ManagerImpl::hangupCall(const CallID& id)
   bool
 ManagerImpl::cancelCall (const CallID& id)
 {
-  stopTone(true);
-  AccountID accountid = getAccountFromCall( id );
-  if (accountid == AccountNULL) {
-    _debug("! Manager Cancel Call: Call doesn't exists\n");
-    return false;
-  }
+    AccountID accountid;
+    bool returnValue;
 
-  bool returnValue = getAccountLink(accountid)->cancel(id);
-  // it could be a waiting call?
-  removeWaitingCall(id);
-  removeCallAccount(id);
-  switchCall("");
+    stopTone(true);
 
-  return returnValue;
+    /* Direct IP to IP call */
+    if (getConfigFromCall (id) == Call::IPtoIP) {
+        returnValue = SIPVoIPLink::instance (AccountNULL)->cancel (id);        
+    }
+
+    /* Classic call, attached to an account */
+    else { 
+        accountid = getAccountFromCall( id );
+        if (accountid == AccountNULL) {
+            _debug("! Manager Cancel Call: Call doesn't exists\n");
+            return false;
+        }
+        returnValue = getAccountLink(accountid)->cancel(id);
+        removeCallAccount(id);
+    }
+        
+    // it could be a waiting call?
+    removeWaitingCall(id);
+    switchCall("");
+
+    return returnValue;
 }
 
 //THREAD=Main
   bool
 ManagerImpl::onHoldCall(const CallID& id)
 {
+    AccountID accountid;
+    bool returnValue;
 
-  stopTone(true);
-  AccountID accountid = getAccountFromCall( id );
-  if (accountid == AccountNULL) {
-    _debug("5 Manager On Hold Call: Account ID %s or callid %s doesn't exists\n", accountid.c_str(), id.c_str());
-    return false;
-  }
+    stopTone(true);
 
-  _debug("Setting ONHOLD, Account %s, callid %s\n", accountid.c_str(), id.c_str());
+    /* Direct IP to IP call */
+    if (getConfigFromCall (id) == Call::IPtoIP) {
+        returnValue = SIPVoIPLink::instance (AccountNULL)-> onhold (id);        
+    }
 
-  bool returnValue = getAccountLink(accountid)->onhold(id);
+    /* Classic call, attached to an account */
+    else { 
+        accountid = getAccountFromCall( id );
+        if (accountid == AccountNULL) {
+            _debug("Manager On Hold Call: Account ID %s or callid %s doesn't exists\n", accountid.c_str(), id.c_str());
+            return false;
+        }
+        returnValue = getAccountLink(accountid)->onhold(id);
+    }
 
-  removeWaitingCall(id);
-  if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HOLD");
-  switchCall("");
+    removeWaitingCall(id);
+    switchCall("");
+  
+    if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HOLD");
 
-  return returnValue;
+    return returnValue;
 }
 
 //THREAD=Main
@@ -368,86 +402,117 @@ ManagerImpl::onHoldCall(const CallID& id)
 ManagerImpl::offHoldCall(const CallID& id)
 {
   
-  stopTone(false);
-  AccountID accountid = getAccountFromCall( id );
-  if (accountid == AccountNULL) {
-    _debug("5 Manager OffHold Call: Call doesn't exists\n");
-    return false;
-  }
+    AccountID accountid;
+    bool returnValue, rec;
+    std::string codecName;
 
-  //Place current call on hold if it isn't
-  if (hasCurrentCall()) 
-  { 
-    onHoldCall(getCurrentCallId());
-  }
+    stopTone(false);
 
-  _debug("Setting OFFHOLD, Account %s, callid %s\n", accountid.c_str(), id.c_str());
+    //Place current call on hold if it isn't
+    if (hasCurrentCall()) 
+    { 
+        onHoldCall(getCurrentCallId());
+    }
 
-  bool rec = getAccountLink(accountid)->isRecording(id);
-  
-  /*
-  if(rec)
-    _debug("ManagerImpl::offHoldCall(): Record state is true \n");
-  else
-    _debug("ManagerImpl::offHoldCall(): Record state is false \n");
-  */
+    /* Direct IP to IP call */
+    if (getConfigFromCall (id) == Call::IPtoIP) {
+        rec = SIPVoIPLink::instance (AccountNULL)-> isRecording (id);
+        returnValue = SIPVoIPLink::instance (AccountNULL)-> offhold (id);        
+    }
 
-  bool returnValue = getAccountLink(accountid)->offhold(id);
+    /* Classic call, attached to an account */
+    else { 
+        accountid = getAccountFromCall( id );
+        if (accountid == AccountNULL) {
+            _debug("Manager OffHold Call: Call doesn't exists\n");
+            return false;
+        }
+        _debug("Setting OFFHOLD, Account %s, callid %s\n", accountid.c_str(), id.c_str());
+        rec = getAccountLink(accountid)->isRecording(id);
+        returnValue = getAccountLink(accountid)->offhold(id);
+    }
 
-  if (_dbus){ 
-    if (rec)
-      _dbus->getCallManager()->callStateChanged(id, "UNHOLD_RECORD");
-    else 
-      _dbus->getCallManager()->callStateChanged(id, "UNHOLD_CURRENT");
-  }
-  switchCall(id);
+    if (_dbus){ 
+        if (rec)
+            _dbus->getCallManager()->callStateChanged(id, "UNHOLD_RECORD");
+        else 
+            _dbus->getCallManager()->callStateChanged(id, "UNHOLD_CURRENT");
+    }
+  
+    switchCall(id);
 
-  std::string codecName = getCurrentCodecName(id);
-  _debug("ManagerImpl::hangupCall(): broadcast codec name %s \n",codecName.c_str());
-  if (_dbus) _dbus->getCallManager()->currentSelectedCodec(id,codecName.c_str());
+    codecName = getCurrentCodecName(id);
+    _debug("ManagerImpl::hangupCall(): broadcast codec name %s \n",codecName.c_str());
+    if (_dbus) _dbus->getCallManager()->currentSelectedCodec(id,codecName.c_str());
 
-  return returnValue;
+    return returnValue;
 }
 
 //THREAD=Main
   bool
 ManagerImpl::transferCall(const CallID& id, const std::string& to)
 {
-  stopTone(true);
-  AccountID accountid = getAccountFromCall( id );
-  if (accountid == AccountNULL) {
-    _debug("! Manager Transfer Call: Call doesn't exists\n");
-    return false;
-  }
-  bool returnValue = getAccountLink(accountid)->transfer(id, to);
-  removeWaitingCall(id);
-  removeCallAccount(id);
-  if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HUNGUP");
-  switchCall("");
-  return returnValue;
+    AccountID accountid;
+    bool returnValue;
+  
+    stopTone(true);
+  
+    /* Direct IP to IP call */
+    if (getConfigFromCall (id) == Call::IPtoIP) {
+        returnValue = SIPVoIPLink::instance (AccountNULL)-> transfer (id, to);        
+    }
+
+    /* Classic call, attached to an account */
+    else { 
+        accountid = getAccountFromCall( id );
+        if (accountid == AccountNULL) {
+            _debug("! Manager Transfer Call: Call doesn't exists\n");
+            return false;
+        }
+        returnValue = getAccountLink(accountid)->transfer(id, to);
+        removeCallAccount(id);
+    }
+        
+    removeWaitingCall(id);
+    switchCall("");
+  
+    if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HUNGUP");
+    return returnValue;
 }
 
 //THREAD=Main : Call:Incoming
   bool
 ManagerImpl::refuseCall (const CallID& id)
 {
-  _debug("ManagerImpl::refuseCall(): method called");
-  stopTone(true);
-  AccountID accountid = getAccountFromCall( id );
-  if (accountid == AccountNULL) {
-    _debug("! Manager OffHold Call: Call doesn't exists\n");
-    return false;
-  }
-  bool returnValue = getAccountLink(accountid)->refuse(id);
-  // if the call was outgoing or established, we didn't refuse it
-  // so the method did nothing
-  if (returnValue) {
-    removeWaitingCall(id);
-    removeCallAccount(id);
-    if (_dbus) _dbus->getCallManager()->callStateChanged(id, "HUNGUP");
-    switchCall("");
-  }
-  return returnValue;
+    AccountID accountid;
+    bool returnValue;
+  
+    stopTone(true);
+
+     /* Direct IP to IP call */
+    if (getConfigFromCall (id) == Call::IPtoIP) {
+        returnValue = SIPVoIPLink::instance (AccountNULL)-> refuse (id);        
+    }
+
+    /* Classic call, attached to an account */
+    else { 
+        accountid = getAccountFromCall( id );
+        if (accountid == AccountNULL) {
+            _debug("! Manager OffHold Call: Call doesn't exists\n");
+            return false;
+        }
+        returnValue = getAccountLink(accountid)->refuse(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 (_dbus) _dbus->getCallManager()->callStateChanged(id, "HUNGUP");
+        switchCall("");
+    }
+    return returnValue;
 }
 
 //THREAD=Main
@@ -691,13 +756,14 @@ ManagerImpl::incomingMessage(const AccountID& accountId, const std::string& mess
   void
 ManagerImpl::peerAnsweredCall(const CallID& id)
 {
-  if (isCurrentCall(id)) {
-    stopTone(false);
-  }
-  if (_dbus) _dbus->getCallManager()->callStateChanged(id, "CURRENT");
+    if (isCurrentCall(id)) {
+        stopTone(false);
+    }
+  
+    if (_dbus) _dbus->getCallManager()->callStateChanged(id, "CURRENT");
   
   std::string codecName = getCurrentCodecName(id);
-  _debug("ManagerImpl::hangupCall(): broadcast codec name %s \n",codecName.c_str());
+  // _debug("ManagerImpl::hangupCall(): broadcast codec name %s \n",codecName.c_str());
   if (_dbus) _dbus->getCallManager()->currentSelectedCodec(id,codecName.c_str());
 }
 
@@ -1114,6 +1180,13 @@ ManagerImpl::initConfigFile ( bool load_user_value )
   fill_config_int(CONFIG_PA_VOLUME_CTRL , YES_STR);
   fill_config_int(CONFIG_SIP_PORT, DFT_SIP_PORT);
 
+  section = ADDRESSBOOK;
+  fill_config_int (ADDRESSBOOK_MAX_RESULTS, "25");
+  fill_config_int (ADDRESSBOOK_DISPLAY_CONTACT_PHOTO, NO_STR);
+  fill_config_int (ADDRESSBOOK_DISPLAY_PHONE_BUSINESS, YES_STR);
+  fill_config_int (ADDRESSBOOK_DISPLAY_PHONE_HOME, NO_STR);
+  fill_config_int (ADDRESSBOOK_DISPLAY_PHONE_MOBILE, NO_STR);
+
   // Loads config from ~/.sflphone/sflphonedrc or so..
   if (createSettingsPath() == 1 && load_user_value) {
     _exist = _config.populateFromFile(_path);
@@ -2371,11 +2444,15 @@ void ManagerImpl::restartPJSIP (void)
 
 VoIPLink* ManagerImpl::getAccountLink(const AccountID& accountID)
 {
-  Account* acc = getAccount(accountID);
-  if ( acc ) {
-    return acc->getVoIPLink();
-  }
-  return 0;
+    if (accountID!=AccountNULL) {
+        Account* acc = getAccount(accountID);
+        if ( acc ) {
+            return acc->getVoIPLink();
+        }
+        return 0;
+    }
+    else
+        return SIPVoIPLink::instance("");
 }
 
 VoIPLink* ManagerImpl::getSIPAccountLink()
@@ -2438,65 +2515,76 @@ void ManagerImpl::registerCurSIPAccounts(VoIPLink *link)
     }    
 }
 
-#ifdef TEST
-/** 
- * Test accountMap
- */
-bool ManagerImpl::testCallAccountMap()
-{
-  if ( getAccountFromCall(1) != AccountNULL ) {
-    _debug("TEST: getAccountFromCall with empty list failed\n");
-  }
-  if ( removeCallAccount(1) != false ) {
-    _debug("TEST: removeCallAccount with empty list failed\n");
-  }
-  CallID newid = getNewCallID();
-  if ( associateCallToAccount(newid, "acc0") == false ) {
-    _debug("TEST: associateCallToAccount with new CallID empty list failed\n");
-  }
-  if ( associateCallToAccount(newid, "acc1") == true ) {
-    _debug("TEST: associateCallToAccount with a known CallID failed\n");
-  }
-  if ( getAccountFromCall( newid ) != "acc0" ) {
-    _debug("TEST: getAccountFromCall don't return the good account id\n");
-  }
-  CallID secondnewid = getNewCallID();
-  if ( associateCallToAccount(secondnewid, "xxxx") == true ) {
-    _debug("TEST: associateCallToAccount with unknown account id failed\n");
-  }
-  if ( removeCallAccount( newid ) != true ) {
-    _debug("TEST: removeCallAccount don't remove the association\n");
-  }
 
-  return true;
+std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings () {
+
+    std::map<std::string, int32_t> settings;
+
+    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;
 }
 
-/**
- * Test AccountMap
- */
-bool ManagerImpl::testAccountMap() 
-{
-  if (loadAccountMap() != 2) {
-    _debug("TEST: loadAccountMap didn't load 2 account\n");
-  }
-  if (accountExists("acc0") == false) {
-    _debug("TEST: accountExists didn't find acc0\n");
-  }
-  if (accountExists("accZ") != false) {
-    _debug("TEST: accountExists found an unknown account\n");
-  }
-  if (getAccount("acc0") == 0) {
-    _debug("TEST: getAccount didn't find acc0\n");
-  }
-  if (getAccount("accZ") != 0) {
-    _debug("TEST: getAccount found an unknown account\n");
-  }
-  unloadAccountMap();
-  if ( accountExists("acc0") == true ) {
-    _debug("TEST: accountExists found an account after unloadAccount\n");
-  }
-  return true;
+void ManagerImpl::setAddressbookSettings (const std::map<std::string, int32_t>& settings){
+
+    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 ();
 }
 
+void ManagerImpl::check_call_configuration (const CallID& id, const std::string &to, Call::CallConfiguration *callConfig) {
+    std::string pattern;
+    Call::CallConfiguration config;
+
+    /* Check if the call is an IP-to-IP call */
+    /* For an IP-to-IP call, we don't need any account */
+    /* Pattern looked for : ip:xxx.xxx.xxx.xxx */
+    pattern = to.substr (0,3);
+    if (pattern==IP_TO_IP_PATTERN) {
+        config = Call::IPtoIP;
+    } else {
+        config = Call::Classic;
+    }
+    associateConfigToCall (id, config);
+    *callConfig = config;
+}
+
+
+bool ManagerImpl::associateConfigToCall (const CallID& callID, Call::CallConfiguration config) {
+
+    if (getConfigFromCall(callID) == CallConfigNULL) { // nothing with the same ID
+        _callConfigMap[callID] = config;
+        _debug("Associate Call %s with config %i\n", callID.data(), config);
+        return true;
+    } else {
+        return false;
+    }
+}
+
+Call::CallConfiguration ManagerImpl::getConfigFromCall(const CallID& callID) {
+
+    CallConfigMap::iterator iter = _callConfigMap.find(callID);
+    if ( iter == _callConfigMap.end()) {
+        return (Call::CallConfiguration)CallConfigNULL;
+    } else {
+        return iter->second;
+    }
+}
+
+bool ManagerImpl::removeCallConfig(const CallID& callID) {
+
+    if ( _callConfigMap.erase(callID) ) {
+        return true;
+    }
+    return false;
+}
 
-#endif
diff --git a/src/managerimpl.h b/src/managerimpl.h
index 0765bac47619e05229a9f0fbca829f97a17611f1..c9c919d77b7a4dcf1c7f51b022bc507af12e08c9 100644
--- a/src/managerimpl.h
+++ b/src/managerimpl.h
@@ -58,6 +58,8 @@ typedef std::map<AccountID, Account*> AccountMap;
 /** Define a type for a CallID to AccountID Map inside ManagerImpl */
 typedef std::map<CallID, AccountID> CallAccountMap;
 
+typedef std::map<CallID, Call::CallConfiguration> CallConfigMap;
+
 /** Define a type for CallID vector (waiting list, incoming not answered) */
 typedef std::set<CallID> CallIDSet;
 
@@ -553,6 +555,17 @@ class ManagerImpl {
      */
     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);
+
     /**
      * Get the audio manager
      * @return int The audio manager
@@ -989,6 +1002,14 @@ class ManagerImpl {
     /** 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
@@ -1053,7 +1074,7 @@ public:
      * @param accountID	  Account ID to get
      * @return VoIPLink*   The voip link from the account pointer or 0
      */
-    VoIPLink* getAccountLink(const AccountID& accountID);
+    VoIPLink* getAccountLink(const AccountID& accountID=AccountNULL);
 
     VoIPLink* getSIPAccountLink (void);
 
@@ -1076,6 +1097,11 @@ private:
     // Assignment Operator
     ManagerImpl& operator=( const ManagerImpl& rh);
 
+    /**
+     * 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);
+
 #ifdef TEST
     bool testCallAccountMap();
     bool testAccountMap();
diff --git a/src/samplerateconverter.cpp b/src/samplerateconverter.cpp
index a4e8474d37127fac823216486bd550cff6a711c5..e1990f930e89af183a183d4f55de26cfec82857b 100644
--- a/src/samplerateconverter.cpp
+++ b/src/samplerateconverter.cpp
@@ -64,8 +64,10 @@ void SamplerateConverter::init( void ) {
   // libSamplerateConverter-related
   // Set the converter type for the upsampling and the downsampling
   // interpolator SRC_SINC_BEST_QUALITY
-  _src_state_mic  = src_new(SRC_LINEAR, 1, &_src_err);
-  _src_state_spkr = src_new(SRC_LINEAR, 1, &_src_err);
+  // interpolator SRC_SINC_FASTEST
+  // interpolator SRC_LINEAR
+  _src_state_mic  = src_new(SRC_SINC_FASTEST, 1, &_src_err);
+  _src_state_spkr = src_new(SRC_SINC_FASTEST, 1, &_src_err);
 
   int nbSamplesMax = (int) ( getFrequence() * getFramesize() / 1000 );
   _floatBufferDownMic  = new float32[nbSamplesMax];
diff --git a/src/sdp.h b/src/sdp.h
index 9bbd0d5344e43b37594a759067e9a9f4b82f7695..a30b18807f7ee780f9257189920ad55fcda9b11b 100644
--- a/src/sdp.h
+++ b/src/sdp.h
@@ -180,6 +180,7 @@ class Sdp {
         unsigned int get_remote_audio_port() { return _remote_audio_port; }
 
         void fetch_media_transport_info_from_remote_sdp (pjmedia_sdp_session *remote_sdp);
+
     private:
         /** Codec Map */
         std::vector<sdpMedia*> _local_media_cap;
diff --git a/src/sipvoiplink.cpp b/src/sipvoiplink.cpp
index acb8d8b0e5e38efb266f586b9cff5a078b7f8ea2..d0c6d8edbc3c55e768b7e4fa4d71e3dd7a92aebd 100644
--- a/src/sipvoiplink.cpp
+++ b/src/sipvoiplink.cpp
@@ -25,8 +25,10 @@
 #include "sipaccount.h"
 #include "audio/audiortp.h"
 
+
 #define CAN_REINVITE    1
 
+
 /**************** EXTERN VARIABLES AND FUNCTIONS (callbacks) **************************/
 
 /*
@@ -289,7 +291,7 @@ SIPVoIPLink::getEvent()
 
 int SIPVoIPLink::sendRegister( AccountID id )
 {
-    _debug("sendRegister called!!!!!!!!!!!!!!!!!!!!!!! \n");
+
     pj_status_t status;
     int expire_value;
     char contactTmp[256];
@@ -341,6 +343,7 @@ int SIPVoIPLink::sendRegister( AccountID id )
     tmp = "sip:" + hostname;
     pj_strdup2(_pool, &svr, tmp.data());
 
+    // tmp = "<sip:" + username + "@" + hostname + ";transport=tls>";
     tmp = "<sip:" + username + "@" + hostname + ">";
     pj_strdup2(_pool, &aor, tmp.data());
 
@@ -377,6 +380,7 @@ int SIPVoIPLink::sendRegister( AccountID id )
         return false;
     }
 
+    _debug("Send the registration ######### \n");
     status = pjsip_regc_send(regc, tdata);
     if (status != PJ_SUCCESS) {
         _debug("UserAgent: Unable to send regc request.\n");
@@ -779,7 +783,6 @@ SIPVoIPLink::transfer(const CallID& id, const std::string& to)
 
 bool SIPVoIPLink::transferStep2()
 {
-    _debug("SIPVoIPLink::transferStep2():When is this function called?");
     _audiortp->closeRtpSession();
     return true;
 }
@@ -791,7 +794,7 @@ SIPVoIPLink::refuse (const CallID& id)
     pj_status_t status;
     pjsip_tx_data *tdata;
 
-    _debug("SIPVoIPLink::refuse() : teh call is refused \n");
+    _debug("SIPVoIPLink::refuse() : the call is refused \n");
     call = getSIPCall(id);
 
     if (call==0) { 
@@ -950,6 +953,7 @@ SIPVoIPLink::SIPStartCall(SIPCall* call, const std::string& subject UNUSED)
     pj_strdup2(_pool, &to, strTo.data());
     pj_strdup2(_pool, &contact, account->getContact().data());
 
+    _debug("%s %s %s\n", from.ptr, contact.ptr, to.ptr);
     // create the dialog (UAC)
     status = pjsip_dlg_create_uac(pjsip_ua_instance(), &from,
             &contact,
@@ -1091,7 +1095,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
                 _debug ("Get remote media information from offer\n");
                 call->getLocalSDP()->fetch_media_transport_info_from_remote_sdp (r_sdp);
 
-                _debug ("Update call state\n");
+                _debug ("Update call state , id = %s\n", call->getCallId().c_str());
                 call->setConnectionState(Call::Connected);
                 call->setState(Call::Active);
 
@@ -1133,6 +1137,83 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
         }
     }
 
+    bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to) {
+
+        SIPCall *call;
+        pj_status_t status;
+        std::string uri_from, uri_to, hostname;
+        std::ostringstream uri_contact;
+        pj_str_t from, str_to, contact;
+        pjsip_dialog *dialog;
+        pjsip_inv_session *inv;
+        pjsip_tx_data *tdata;
+
+        /* Create the call */
+        call = new SIPCall(id, Call::Outgoing, _pool);
+
+        if (call) {
+        
+            call->setCallConfiguration (Call::IPtoIP);
+            call->setPeerNumber(getSipTo(to, getLocalIPAddress()));
+
+            // Generate the from URI
+            hostname = pj_gethostname()->ptr;
+            uri_from = "sip:" + hostname + "@" + getLocalIPAddress() ;
+
+            // Generate the from URI
+            uri_to = "sip:" + to.substr (3, to.length());
+
+            // Generate the to URI
+            setCallAudioLocal(call, getLocalIPAddress(), useStun(), getStunServer());
+
+            call->initRecFileName();
+
+            // Building the local SDP offer
+            call->getLocalSDP()->set_ip_address(getLocalIP());
+            call->getLocalSDP()->create_initial_offer();
+
+            // Generate the contact URI
+            uri_contact << "<" << uri_from << ":" << call->getLocalSDP()->get_local_extern_audio_port() << ">";
+
+            // pjsip need the from and to information in pj_str_t format
+            pj_strdup2(_pool, &from, uri_from.data());
+            pj_strdup2(_pool, &str_to, uri_to.data());
+            pj_strdup2(_pool, &contact, uri_contact.str().data());
+
+            // create the dialog (UAC)
+            status = pjsip_dlg_create_uac(pjsip_ua_instance(), &from, &contact, &str_to, 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);
+
+            // 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->setState(Call::Active);
+            addCall(call);
+            
+            return true;
+        }
+        else
+            return false;
+    } 
+
+
     ///////////////////////////////////////////////////////////////////////////////
     // Private functions
     ///////////////////////////////////////////////////////////////////////////////
@@ -1356,7 +1437,8 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
         pj_sockaddr_in bound_addr;
         pjsip_host_port a_name;
         char tmpIP[32];
-        pj_sock_t sock;        
+        pj_sock_t sock;
+
 
         // Init bound address to ANY
         pj_memset(&bound_addr, 0, sizeof (bound_addr));
@@ -1367,33 +1449,29 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
         bound_addr.sin_family = PJ_AF_INET;
         pj_bzero(bound_addr.sin_zero, sizeof(bound_addr.sin_zero));
 
-
-
-        _debug("bound_addr.sin_port %i \n", bound_addr.sin_port);
-
-
-        _debug("UserAgent: Use IP: %s\n", _localExternAddress.data());
-
-
         // Create UDP-Server (default port: 5060)
         strcpy(tmpIP, _localExternAddress.data());
         pj_strdup2(_pool, &a_name.host, tmpIP);
-        a_name.port = (pj_uint16_t) _localExternPort;
+        a_name.port = (pj_uint16_t) _localExternPort; 
 
 
-        // status = pjsip_tls_transport_start(_endpt, NULL, &bound_addr, &a_name, 1, NULL);
-        status = pjsip_udp_transport_start(_endpt, &bound_addr, &a_name, 1, NULL);
-
+        status = pjsip_udp_transport_start(_endpt, &bound_addr, &a_name, 1, NULL);   
         if (status != PJ_SUCCESS) {
             _debug("UserAgent: (%d) Unable to start UDP transport!\n", status);
             return -1;
         } else {
             _debug("UserAgent: UDP server listening on port %d\n", _localExternPort);
         }
-
+        
+        
+        _debug("Transport initialized successfully! \n");
         return PJ_SUCCESS;
     }
 
+    
+   
+    
+
     bool SIPVoIPLink::loadSIPLocalIP() {
 
         bool returnValue = true;
@@ -1508,11 +1586,11 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
     }
 
     void SIPVoIPLink::handle_reinvite (SIPCall *call) {
-    
+
         // Close the previous RTP session
         _audiortp->closeRtpSession ();
         call->setAudioStart (false);
-    
+
         // Create a new one with new info
         if (_audiortp->createNewSession (call) >= 0) {
             call->setAudioStart (true);
@@ -1525,6 +1603,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
     /*******************************/
 
     void call_on_state_changed( pjsip_inv_session *inv, pjsip_event *e){
+        _debug("call_on_state_changed!!!!!!!!!\n");
 
         SIPCall *call;
         AccountID accId;
@@ -1541,6 +1620,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
         //Retrieve the body message
         rdata = e->body.tsx_state.src.rdata;
 
+        
         /* If this is an outgoing INVITE that was created because of
          * REFER/transfer, send NOTIFY to transferer.
          */
@@ -1609,8 +1689,16 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
             // We receive a ACK - The connection is established
             else if( inv->state == PJSIP_INV_STATE_CONFIRMED ){
                 _debug ("*************************** PJSIP_INV_STATE_CONFIRMED ***********************************\n");
-                accId = Manager::instance().getAccountFromCall(call->getCallId());
-                link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink(accId));
+                    
+                /* If the call is a direct IP-to-IP call */
+                if (call->getCallConfiguration () == Call::IPtoIP) {
+                    link = SIPVoIPLink::instance("");
+                }
+                else {
+                    accId = Manager::instance().getAccountFromCall(call->getCallId());
+                    link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink(accId));
+                }
+                
                 if (link)
                     link->SIPCallAnswered(call, rdata);
             }
@@ -1622,6 +1710,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
                     /* The call terminates normally - BYE / CANCEL */
                     case PJSIP_SC_OK:
                     case PJSIP_SC_DECLINE:
+                    case PJSIP_SC_REQUEST_TERMINATED: 
                         accId = Manager::instance().getAccountFromCall(call->getCallId());
                         link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink(accId));
                         if (link) {
@@ -1629,7 +1718,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
                         }
                         break; 
 
-                    /* The call connection failed */
+                        /* The call connection failed */
                     case PJSIP_SC_NOT_FOUND:            /* peer not found */
                     case PJSIP_SC_REQUEST_TIMEOUT:      /* request timeout */
                     case PJSIP_SC_NOT_ACCEPTABLE_HERE:  /* no compatible codecs */
@@ -1641,7 +1730,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
                             link->SIPCallServerFailure(call);
                         }
                         break;
-                    
+
                     default:
                         _debug ("sipvoiplink.cpp - line 1635 : Unhandled call state. This is probably a bug.\n");
                         break;
@@ -1653,7 +1742,6 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
     }
 
     void call_on_media_update( pjsip_inv_session *inv, pj_status_t status) {
-        _debug("call_on_media_updated\n");
 
         const pjmedia_sdp_session *r_sdp;
         SIPCall *call;
@@ -1674,15 +1762,14 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
     }
 
     void call_on_forked(pjsip_inv_session *inv, pjsip_event *e){
-        _debug("call_on_forked\n");
     }
 
-    void call_on_tsx_changed(pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_event *e){
-        _debug ("call_on_tsx_changed\n");
+void call_on_tsx_changed(pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_event *e){
     }
 
     void regc_cb(struct pjsip_regc_cbparam *param){
 
+
         //AccountID *id = static_cast<AccountID *> (param->token);
         SIPAccount *account;
 
@@ -1735,6 +1822,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
     pj_bool_t 
         mod_on_rx_request(pjsip_rx_data *rdata)
         {
+            _debug("mod_on_rx_request!!!!!!!!!\n");
 
             pj_status_t status;
             pj_str_t reason;
@@ -1803,13 +1891,15 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
             // Catch the NOTIFY message
             if( rdata->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD )
             {
-                method_name = "NOTIFY";
+                method_name = "NOTIFY";  	
                 // Retrieve all the message. Should contains only the method name but ...
                 request =  rdata->msg_info.msg->line.req.method.name.ptr;
+                _debug("PRINT REQUEST: %s \n",request);
                 // Check if the message is a notification
                 if( request.find( method_name ) != (size_t)-1 ) {
                     /* Notify the right account */
                     set_voicemail_info( account_id, rdata->msg_info.msg->body );
+                    request.find( method_name );
                 }
                 pjsip_endpt_respond_stateless(_endpt, rdata, PJSIP_SC_OK, NULL, NULL, NULL);
                 return true;
@@ -1903,12 +1993,12 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
         }
 
     pj_bool_t mod_on_rx_response(pjsip_rx_data *rdata UNUSED) {
-        _debug("mod_on_rx_response\n");
         return PJ_SUCCESS;
     }
 
     void onCallTransfered(pjsip_inv_session *inv, pjsip_rx_data *rdata)
     {
+
         pj_status_t status;
         pjsip_tx_data *tdata;
         SIPCall *existing_call;
@@ -2114,61 +2204,66 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
 
 
     void xfer_func_cb( pjsip_evsub *sub, pjsip_event *event){
+        
 
         PJ_UNUSED_ARG(event);
+       
+        // _debug(" %s \n", event->body.rx_msg.rdata->msg_info.msg_buf);
+            
 
         _debug("UserAgent: Transfer callback is involved!\n");
+        // _debug("UserAgent: pjsip_evsub_get_state_name: %s \n", pjsip_evsub_get_state_name(sub));
+
         /*
          * When subscription is accepted (got 200/OK to REFER), check if 
          * subscription suppressed.
          */
         if (pjsip_evsub_get_state(sub) == PJSIP_EVSUB_STATE_ACCEPTED) {
+             
+            _debug("Transfer accepted! Waiting for notifications. \n");
 
+            /*
             pjsip_rx_data *rdata;
             pjsip_generic_string_hdr *refer_sub;
             const pj_str_t REFER_SUB = {(char*)"Refer-Sub", 9 };
 
-            SIPVoIPLink *link = reinterpret_cast<SIPVoIPLink *> (pjsip_evsub_get_mod_data(sub,
-                        _mod_ua.id));
-
-            /* Must be receipt of response message */
-            pj_assert(event->type == PJSIP_EVENT_TSX_STATE &&
-                    event->body.tsx_state.type == PJSIP_EVENT_RX_MSG);
+            SIPVoIPLink *link = reinterpret_cast<SIPVoIPLink *> (pjsip_evsub_get_mod_data(sub, _mod_ua.id));
+            
+            // Must be receipt of response message 
+            pj_assert(event->type == PJSIP_EVENT_TSX_STATE && event->body.tsx_state.type == PJSIP_EVENT_RX_MSG);
             rdata = event->body.tsx_state.src.rdata;
-
-            /* Find Refer-Sub header */
-            refer_sub = (pjsip_generic_string_hdr*)
-                pjsip_msg_find_hdr_by_name(rdata->msg_info.msg,
-                        &REFER_SUB, NULL);
-
-            /* Check if subscription is suppressed */
+ 
+            // Find Refer-Sub header 
+            refer_sub = (pjsip_generic_string_hdr*)pjsip_msg_find_hdr_by_name(rdata->msg_info.msg, &REFER_SUB, NULL);
+                
+            // Check if subscription is suppressed 
             if (refer_sub && pj_stricmp2(&refer_sub->hvalue, "false")==0) {
-                /* Since no subscription is desired, assume that call has been
-                 * transfered successfully.
-                 */
+                // Since no subscription is desired, assume that call has been transfered successfully.
+                    
                 if (link) {
                     // It's the time to stop the RTP
+                      
                     link->transferStep2();
                 }
-
-                /* Yes, subscription is suppressed.
-                 * Terminate our subscription now.
-                 */
+                    
+                // Yes, subscription is suppressed.Terminate our subscription now.
                 _debug("UserAgent: Xfer subscription suppressed, terminating event subcription...\n");
                 pjsip_evsub_terminate(sub, PJ_TRUE);
-
-            } else {
-                /* Notify application about call transfer progress. 
-                 * Initially notify with 100/Accepted status.
-                 */
+            } 
+                
+            
+            else {
+              // Notify application about call transfer progress. Initially notify with 100/Accepted status.
+                 
                 _debug("UserAgent: Xfer subscription 100/Accepted received...\n");
             }
+            */
         }
         /*
          * On incoming NOTIFY, notify application about call transfer progress.
          */
         else if (pjsip_evsub_get_state(sub) == PJSIP_EVSUB_STATE_ACTIVE ||
-                pjsip_evsub_get_state(sub) == PJSIP_EVSUB_STATE_TERMINATED)
+                   pjsip_evsub_get_state(sub) == PJSIP_EVSUB_STATE_TERMINATED)
         {
             pjsip_msg *msg;
             pjsip_msg_body *body;
@@ -2177,8 +2272,15 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
             pj_bool_t cont;
             pj_status_t status;
 
-            SIPVoIPLink *link = reinterpret_cast<SIPVoIPLink *> (pjsip_evsub_get_mod_data(sub, 
-                        _mod_ua.id));
+            std::string noresource;
+            std::string ringing;
+            std::string request;
+
+            noresource = "noresource";
+            ringing = "Ringing";
+
+
+            SIPVoIPLink *link = reinterpret_cast<SIPVoIPLink *> (pjsip_evsub_get_mod_data(sub, _mod_ua.id));
 
             /* When subscription is terminated, clear the xfer_sub member of 
              * the inv_data.
@@ -2194,18 +2296,13 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
                 _debug("UserAgent: Either link or event is empty!\n");
                 return;
             }
-
-            // Get current call
-            SIPCall *call = dynamic_cast<SIPCall *>(link->getCall(Manager::instance().getCurrentCallId()));
-            if(!call) {
-                _debug("UserAgent: Call doesn't exit!\n");
-                return;
-            }
+            
 
             /* This better be a NOTIFY request */
             if (event->type == PJSIP_EVENT_TSX_STATE &&
                     event->body.tsx_state.type == PJSIP_EVENT_RX_MSG)
             {
+
                 pjsip_rx_data *rdata;
 
                 rdata = event->body.tsx_state.src.rdata;
@@ -2218,6 +2315,8 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
                     return;
                 }
 
+                
+
                 /* Check for appropriate content */
                 if (pj_stricmp2(&body->content_type.type, "message") != 0 ||
                         pj_stricmp2(&body->content_type.subtype, "sipfrag") != 0)
@@ -2240,11 +2339,39 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
                 status_line.reason = *pjsip_get_status_text(500);
             }
 
+            
+            if(event->body.rx_msg.rdata->msg_info.msg_buf != NULL) {
+                request = event->body.rx_msg.rdata->msg_info.msg_buf;
+                if (request.find( noresource ) != -1) {
+                    _debug("UserAgent: NORESOURCE for transfer!\n");
+                    link->transferStep2();
+                    pjsip_evsub_terminate(sub, PJ_TRUE);
+                    return;
+                }
+
+                if (request.find( ringing ) != -1){
+                    _debug("UserAgent: transfered call RINGING!\n");
+                    link->transferStep2();
+                    pjsip_evsub_terminate(sub, PJ_TRUE);
+                    return;
+                }
+            }
+
+
+            // Get current call
+            SIPCall *call = dynamic_cast<SIPCall *>(link->getCall(Manager::instance().getCurrentCallId()));
+            if(!call) {
+                _debug("UserAgent: Call doesn't exit!\n");
+                return;
+            }
+
+
             /* Notify application */
             is_last = (pjsip_evsub_get_state(sub)==PJSIP_EVSUB_STATE_TERMINATED);
             cont = !is_last;
 
             if(status_line.code/100 == 2) {
+                
                 _debug("UserAgent: Try to stop rtp!\n");
                 pjsip_tx_data *tdata;
 
@@ -2264,6 +2391,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
             if (!cont) {
                 pjsip_evsub_set_mod_data(sub, _mod_ua.id, NULL);
             }
+
         }
 
     }
@@ -2271,6 +2399,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
 
     void xfer_svr_cb(pjsip_evsub *sub, pjsip_event *event)
     {
+        
         PJ_UNUSED_ARG(event);
 
         /*
@@ -2292,7 +2421,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
     }
 
     void on_rx_offer( pjsip_inv_session *inv, const pjmedia_sdp_session *offer ){
-        
+
         _debug ( "********************************* REINVITE RECEIVED *******************************\n" );
 
 #ifdef CAN_REINVITE
@@ -2318,7 +2447,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
 
     }
 
-/*****************************************************************************************************************/
+    /*****************************************************************************************************************/
 
 
     bool setCallAudioLocal(SIPCall* call, std::string localIP, bool stun, std::string server) {
diff --git a/src/sipvoiplink.h b/src/sipvoiplink.h
index 3180dd5c2b6a6e1972cd62cbd4939a43c89b589a..92212c29353f982c147eccdf49356f0f6ce09de6 100644
--- a/src/sipvoiplink.h
+++ b/src/sipvoiplink.h
@@ -312,6 +312,7 @@ class SIPVoIPLink : public VoIPLink
       
         int inv_session_reinvite (SIPCall *call, std::string direction="");
         
+        bool new_ip_to_ip_call (const CallID& id, const std::string& to);
 
     private:
         /**
diff --git a/src/user_cfg.h b/src/user_cfg.h
index a5ab0625f91101b9fa943d9bddef934b4049ecfb..62bb5579e7676c4efac340749324a751bae83de1 100644
--- a/src/user_cfg.h
+++ b/src/user_cfg.h
@@ -71,6 +71,13 @@
 #define STUN_ENABLE     "STUN.enable"
 #define STUN_SERVER     "STUN.server"
 
+#define ADDRESSBOOK                 "Addressbook"               /** Address book section */
+#define ADDRESSBOOK_MAX_RESULTS      "Addressbook.max_results"
+#define ADDRESSBOOK_DISPLAY_CONTACT_PHOTO   "Addressbook.contact_photo"
+#define ADDRESSBOOK_DISPLAY_PHONE_BUSINESS   "Addressbook.phone_business"
+#define ADDRESSBOOK_DISPLAY_PHONE_HOME          "Addressbook.phone_home"
+#define ADDRESSBOOK_DISPLAY_PHONE_MOBILE    "Addressbook.phone_mobile"
+
 #define EMPTY_FIELD		""			/** Default value for empty field */
 #define DFT_STUN_SERVER 	"stun.fwdnet.net:3478"	/** Default STUN server address */
 #define	YES_STR			"1"			/** Default YES value */   
diff --git a/www/css/style1.css b/www/css/style1.css
index e286fb9fe8351aa9c81d9d793d0858835b03a957..93ccea13258a9902b8f3dcf15f97519be21f06b6 100644
--- a/www/css/style1.css
+++ b/www/css/style1.css
@@ -547,50 +547,9 @@ code {
 .thumbnails li img {
     outline: 4px solid;
     margin: 0.5em;
-    margin-top: 15%;
 }
 
 .thumbnails li:hover {
     opacity: 1;
 }
 
-
-.separator {
-    margin: 2em;
-}
-
-
-/**GNU LOGO **/
-.gpl-logo {
-    float: right;
-    position: relative;
-}
-
-.gpl-logo img {
-    margin-top: -8px;
-}
-    
-
-.download {
-    background: url(/img/download.png);
-    width: 280px;
-    height: 45px;
-    padding-top: 2.7em;
-    margin: 0 auto;
-}
-
-.download:hover {
-    background: url(/img/download-up.png);
-}
-
-.download span {
-    display: block;
-}
-
-.free-download {
-    margin-top: 7px;
-}
-
-.sfl-version {
-    line-height: 5px;
-}
diff --git a/www/include/footer.php b/www/include/footer.php
index 6230c7eea29e2799399f1a64238f37cc5656e0f4..64f336dbbdf709a37c2548bdde281792c8e34893 100644
--- a/www/include/footer.php
+++ b/www/include/footer.php
@@ -38,7 +38,7 @@
                                     <div class="rightfootBlock">
                                         <ul>
                                         <li>
-                                    		© Savoir-Faire Linux Inc 2009</li>
+                                    		© Savoir-Faire Linux Inc 2009<img src="img/logos/custom/gpl3.png" /></li>
                                         </ul>
                                     </div>
                                     <div class="clear">&nbsp;
diff --git a/www/include/header.php b/www/include/header.php
index a5589082abec0239ab582be0ec185417c6acd099..636721174ee9340582082c0be5d0be5315d1306a 100644
--- a/www/include/header.php
+++ b/www/include/header.php
@@ -40,22 +40,22 @@
             <tbody valign="top">
                 <tr>
                     <td  class="option">
-                        <div id="option"> </div>
-                    </td>
+                    <div id="option">
+                    </div>
+                </td>
 
                 <td  class="navigation">
-                    <div class="gpl-logo"><a href="http://www.gnu.org/copyleft/gpl.html" ><img src="img/logos/custom/gpl3.png" /></a></div>
                     <div id="navigation">
                         <div class="dynamic-nav" style="background: #CDCDCD;" >&nbsp;</div>
-                        <ul>
-                            <li <?php echo ($name == 'contact')?'class="active"':"" ?>><a href='contact.php'><span>Contact</span></a></li>
-                            <li <?php echo ($name == 'wiki')?'class="active"':"" ?>><a href='http://dev.savoirfairelinux.net/sflphone/'><span>Wiki</span></a></li>
-                            <li <?php echo ($name == 'download')?'class="active"':"" ?>><a href='download.php'><span>Download</span></a></li>
-                            <li <?php echo ($name == 'screenshot')?'class="active"':"" ?>><a href='screenshot.php'><span>Screenshots</span></a></li>
-                            <li <?php echo ($name == 'feature')?'class="active"':"" ?>><a href='features.php'><span>Features</span></a></li>
-                            <li <?php echo ($name == 'home')?'class="active"':"" ?>><a href='index.php'><span>Home</span></a></li>
-                        </ul>
-                    </div>
+                            <ul>
+                                <li <?php echo ($name == 'contact')?'class="active"':"" ?>><a href='contact.php'><span>Contact</span></a></li>
+                                <li <?php echo ($name == 'wiki')?'class="active"':"" ?>><a href='http://projects.savoirfairelinux.net/wiki/sflphone'><span>Wiki</span></a></li>
+                                <li <?php echo ($name == 'download')?'class="active"':"" ?>><a href='download.php'><span>Download</span></a></li>
+                                <li <?php echo ($name == 'screenshot')?'class="active"':"" ?>><a href='screenshot.php'><span>Screenshots</span></a></li>
+                                <li <?php echo ($name == 'feature')?'class="active"':"" ?>><a href='features.php'><span>Features</span></a></li>
+                                <li <?php echo ($name == 'home')?'class="active"':"" ?>><a href='index.php'><span>Home</span></a></li>
+                            </ul>
+                        </div>
                 </td>
             </tr>
         </tbody>
diff --git a/www/index.php b/www/index.php
index 45e1afee8876079ea4ec2f8e842b707975589d54..ae4af2b780dcb40e33d28cd7340f63ad33b261fa 100644
--- a/www/index.php
+++ b/www/index.php
@@ -33,31 +33,17 @@ include_once('include/header.php');
                                         <li>Gnome integration</li>
                                     </ul> 
                                     <div class="float_it_middle">
-                                        <a href="download.php" >
-                                            <div class="download">
-                                                <span class="free-download">Free download</span>
-                                                <span class="sfl-version">Linux version: 0.9.3-3</span>
-                                            </div>
-                                        </a>
-                                    </div>
-                                    <div class="separator">&nbsp;</div>
+                                        <a href="download.php" ><img src="img/download_icon.png" width="61" height="68" alt=""/></a>
+                                    </div> 
                                     <div class="float_it_middle">
-                                    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
-                                        <input type="hidden" name="cmd" value="_s-xclick">
-                                        <input type="hidden" name="hosted_button_id" value="3918066">
-                                        <input type="image" 
-                                        src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" 
-                                        name="submit" alt="PayPal - The safer, easier way to pay online!">
-                                        <img alt="" border="0" 
-                                        src="https://www.paypal.com/fr_XC/i/scr/pixel.gif" width="1" height="1">
-                                    </form>
+                                        <p class="highlight"><a href="download.php" >Download now!</a></p>
                                     </div>
                                 </td>
                             </tr>
-                            <!--<tr>
+                            <tr>
                                 <td>
                                 </td>
-                            </tr>-->
+                            </tr>
                         </tbody>
                     </table>  
                 </td>